简述MyBatis、MyBatis-Plus、以及MyBatis-Plus的简单运用

news2024/12/23 10:24:52

什么是MyBatis

MyBatis是一个开源的Java持久层框架,用于简化与关系型数据库的交互。它通过将SQL语句与Java代码进行分离,提供了一种优雅的方式来处理数据库操作。

MyBatis核心思想是将SQL语句与Java方法进行映射,使得开发人员可以通过配置文件或注解来定义和管理SQL语句。这样做的好处是可以将SQL语句与Java代码解耦,降低了代码的维护成本,提高了代码的可读性和可维护性。

使用MyBatis,开发人员可以使用简单的XML配置或注解来描述数据库表和Java对象之间的映射关系,从而实现对象关系映射(ORM)。此外,MyBatis还提供了丰富的功能,如动态SQL、缓存、事务管理等,以满足各种复杂的数据库操作需求。

总的来说,MyBatis是一个轻量级、灵活且功能强大的Java持久层框架,它简化了数据库操作的编写和管理,并提供了丰富的特性和扩展点,使得开发人员可以更加高效地进行数据访问。

什么是MyBatis-Plus

MyBatis-Plus是一个基于MyBatis的轻量级、强大且功能丰富的持久层框架,它进一步简化了与关系型数据库的交互。它是在MyBatis的基础上进行扩展和增强的工具集,提供了更多便捷的开发功能和增强的查询能力。

MyBatis-Plus提供了一系列的增删改查操作的封装方法,使得开发人员可以通过简单的API调用完成常见的数据库操作,无需编写繁琐的SQL语句。它还提供了诸如分页查询、条件构造器、Lambda表达式查询等高级查询功能,极大地简化了复杂查询的编写过程。

除了常见的CRUD操作,MyBatis-Plus还提供了一些额外的功能,如自动生成代码、逻辑删除、乐观锁、多租户支持等,以进一步提升开发效率和代码质量。

总的来说,MyBatis-Plus是一个优秀的持久层框架,它在MyBatis的基础上提供了更多的便利功能和增强能力,使得开发人员可以更加方便、高效地进行数据库操作和查询。它的简洁性、易用性和功能丰富性使得它成为众多Java开发者的首选框架之一。

通过使用 MyBatis-Plus,开发者可以更加快速、高效地进行数据库操作,减少了繁琐的配置和编码工作。

但需要注意的是,MyBatis-Plus 并不是完全取代 MyBatis,而是在其基础上提供了更多的便利功能,因此在具体项目中的选择还需根据实际需求和团队技术偏好来决定。

案例测试MyBatis-Plus

项目创建:

创建SpringBoot项目(使用idea 的Spring Initializr 功能快速搭建一个SpringBoot项目)

 可以在创建SpringBoot选择构建所需依赖:

常见的如:

Spring Boot Lombok :Java 的插件库实现对类的get set tostring 有无参数通过注解来简化代码

MySQL Driver:与 MySQL 数据库进行交互

Spring Web:提供了 Web 应用开发的相关功能

 

pom.xml导包:

当在快速搭建SpringBoot项目时没有或者忘记选择项目依赖时间,我们可以手动在pom.xml导入包。

比如这次的MyBatis-Plus 需要的包

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>MyBatis-Plus-11-30</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>
    <name>MyBatis-Plus-11-30</name>
    <description>MyBatis-Plus-11-30</description>
    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.13</spring-boot.version>
    </properties>
    <dependencies>


        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.33</version>
        </dependency>

        <!--mybatis-plus基础功能所需包-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.3.2</version>
        </dependency>



        <!--代码逆向工程 需要导入2个包 分别是mybatis-plus-generator 和 freemarker -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.3.2</version>
        </dependency>

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.29</version>
            <scope>compile</scope>
        </dependency>







        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>




        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.mybatisplus1130.MyBatisPlus1130Application</mainClass>
                    <skip>true</skip>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

 

配置文件: 

# 应用服务 WEB 访问端口
server.port=8080

#实现对数据库的配置操作
spring.datasource.username=root
spring.datasource.password=000000
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/cs
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
##置了 Hibernate 方言 org.hibernate.dialect.MySQL8Dialect,以便与 MySQL 8+ 版本兼容
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect

 

#配置mybatis-plus实现
#主要配置是控制台输出日志
#取消自带的驼峰命名,这个不取消会更改你数据库表字段名称比如zgl_cs 他会变更成zglCs
#这个配置指定了 MyBatis Mapper XML 文件的位置。classpath:/mapper/**.xml 表示在 classpath 下的 mapper 目录及其子目录中查找以 .xml 结尾的文件作为 Mapper XML 文件。Mapper XML 文件用于定义 SQL 语句和与之关联的方法。
mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: false
  #  简述就是映射文件位置 resource 是默认位置
  mapper-locations: classpath:/mapper/**.xml

这来的yml也是配置文件只是这是yml更适合我们看,都是一样的,如果配置文件有相同配置,最后是以.properties为准则

代码部分:

我们这里先简单的介绍MyBatis-Plus功能:

  1. 最简单的是无需编写繁琐的SQL语句实现对数据库的增删改查等操作。

1.1使用MyBatis-Plus的条件构造器(Wrapper)

1.2这个一样可以使用手写sql,且手写sql语句的两种方式。(注解、xml)

2.代码生成器

文件布局:

 

 数据库部分:

代码部分:

创建类对象:bean目录下的Student类

package com.example.mybatisplus1130.bean;


import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.*;

/*get set toString 有无参数构造  使用的是快速创建SpringBoot时lombok依赖*/
@Setter
@Getter
@ToString
@AllArgsConstructor
@NoArgsConstructor
//声明数据库名称
@TableName("student")
public class Student {
    @TableId//声明数据库主键
    private String stu_id;
    private String stu_name;
    private String stu_sex;
    private String stu_age;
    private String stu_addr;
    /*如果定义的类和数据库定义的字段名称不一样我们可以使用MyBatis-Plus提供的@TableField注解来解决。*/
    @TableField(value = "stu_pwd")
    private String pwd;
}

如果我们创建的数据库属性再带_,但是系统默认会使用驼峰命名,这样你的MyBatis-Plus无sql语句就会报错,原因是系统会把你数据库表字段生成StuId这样的不是stu_id,所以我们可以取消驼峰命名或者数据库我们就按照驼峰命名创建属性。

取消驼峰命:

 Mapper: StudentMapper

package com.example.mybatisplus1130.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mybatisplus1130.bean.Student;
import org.apache.ibatis.annotations.Select;

import java.util.List;

//MyBatis-Plus提供了一系列的增删改查操作的封装方法,使得开发人员可以通过简单的API调用完成常见的数据库操作,无需编写繁琐的SQL语句。
//使用:定义一个接口,继承BaseMapper<操作对象> ,   在去启动项 声明@MapperScan(basePackages = "mapper的路径")
public interface StudentMapper extends BaseMapper<Student> {

/*要知道我们上面的就已经是一个MyBatis-Plus 其是一个接口继承了BaseMapper 已经具备了实现对Stidnet类的增删改成等继承的语句 */


    /*sql的写法有两种,一种是直接使用注解写在mapper方法上,一种是写在xml文件中;*/

//1.注解方式
    @Select("select * from student where stu_name=#{name}")
    public List<Student> findAllByStu_name(String name);
/*
【注解的优点】
    简洁易懂:相比于XML配置,注解的使用更加简洁直观,使代码更具可读性和可维护性。
    易于调试:注解配置可以直接在Java类中编写,减少了在XML中查找和修改SQL的时间。
    更好的性能:在执行大量的增删改操作时,注解配置的性能更高,因为没有XML解析的开销。
【注解的缺点】
    不利于维护:将SQL和Java代码耦合在一起,使得代码难以维护和重构,特别是在涉及到较复杂SQL的情况下。
    SQL可读性差:相比于在XML中编写SQL,注解中的SQL语句通常会更加冗长和难以读懂。
*/


//2.xml方式  xml注解默认在resources的mapper目录下
    public List<Student> findAllByStu_name_ByXml(String name);

/*
【XML的优点】
    易于维护:将SQL分离出Java代码,代码的维护性更高,特别是在需要修改SQL时。
    SQL可读性好:在XML中编写SQL,可以使得SQL的格式更加清晰,可读性更强。
    易于管理:XML配置文件可以全局管理,使得项目的结构更加清晰明了。
【XML的缺点】
    繁琐:XML配置相对于注解,配置较为繁琐,需要更多的代码量。
    性能问题:在执行大量操作时,XML的解析和读取会占用一定的时间,降低了系统的性能。
* */

}

 

 配置文件声明和启动项声明:(我这里选择的是启动项声明)

 

这里解释一下为什么我们需要声明这个(mapper)配置:

在 MyBatis-Plus 中,使用 Mapper 接口来访问数据库。Mapper 接口是一个纯粹的 Java 接口,其中定义了一组数据库操作方法。通过在 Mapper 接口上添加注解和 XML 文件,可以实现对数据库表的增删改查操作。

在 Spring Boot 中,需要将 Mapper 接口注册为 Spring Bean,才能在其他地方进行注入和使用。为了实现自动化的 Mapper 注册,可以使用 MyBatis-Plus 提供的 @MapperScan 注解。@MapperScan 注解用于指定 Mapper 接口所在的包路径,它会自动扫描该包及其子包下的所有 Mapper 接口,并将它们注册为 Spring Bean。在启动项中声明 @MapperScan 注解后,Spring Boot 应用程序会自动扫描 Mapper 接口并将其注册为 Bean,从而使我们可以在其他地方直接注入 Mapper 接口,而无需手动注册 Bean。

因此,在启动项中声明 @MapperScan(basePackages = "mapper文件路径") 是必要的,以确保 Mapper 接口能够被正确地扫描和注册为 Spring Bean,使其能够在整个应用程序中正常使用。

总结:

MyBatis mapper接口定义的对数据库操作的语句都是单纯的java代码接口,定义了操作数据库的方法,我们可以通过MyBatis-Plus定义接口继承BaseMapper或者使用注解或者xml实现对数据库的操作,但是这个前提是要把这个接口通过MyBatis-Plus 提供的 @MapperScan 注解自动扫描 Mapper 接口并将其注册为 Bean,从而使我们可以在其他地方直接注入 Mapper 接口,而无需手动注册 Bean。

在 Spring 框架中,"Bean" 是指由 Spring 容器管理的对象实例。当你将一个类声明为 Bean 后,Spring 容器就会负责实例化、组装和管理这个对象,你可以在应用程序的其他部分通过依赖注入来引用和使用这些 Bean。

 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mybatisplus1130.mapper.StudentMapper">


    <select id="findAllByStu_name_ByXml" parameterType="java.lang.String" resultType="com.example.mybatisplus1130.bean.Student">
        select *
        from student
        where stu_name = #{name,jdbcType=VARCHAR}
        /*,jdbcType=VARCHAR 可写可不写,主要是告诉数据库类型  省去类型检索时间,默认类型转换器需要检索会花费时间 */
    </select>
</mapper>

Service:

StudnetService主要实习的是对数据库的操作

 

package com.example.mybatisplus1130.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.example.mybatisplus1130.bean.Student;
import com.example.mybatisplus1130.mapper.StudentMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class StudentService {
    @Autowired(required = false)
    StudentMapper studentMappere;

/*MyBatis-Plus自带的第一特征无需sql语句操作数据库*/
    public List<Student> findAllStudent(){
        return studentMappere.selectList(null);
    }
/*MyBatis-Plus的条件构造器(Wrapper)来构建查询条件*/
    public  List<Student> findAllStudent_Wrapper(String name,String sex){
        QueryWrapper<Student> queryWrapper=new QueryWrapper<>();
        queryWrapper.eq("stu_sex",sex)
                .like("stu_name",name);
        return studentMappere.selectList(queryWrapper);
    }

/*注解方式写sql语句操作数据库*/
    public List<Student> findAllByStu_name(String name){
        return studentMappere.findAllByStu_name(name);
    }

/*xml方式写sql语句操作数据库*/
    public List<Student> findAllByStu_name_ByXml(String name){
        return studentMappere.findAllByStu_name_ByXml(name);
    }

}

 DmscService主要实习的是代码生成器的操作

代码生成器:

package com.example.mybatisplus1130.service;

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.springframework.stereotype.Service;

import java.sql.Types;
import java.util.Collections;


@Service
public class DmscService {

/*主要实现的是代码生成器
*   代码生成器是一个用于自动生成Java代码和MyBatis映射文件(XML文件)的工具,
*   可以帮助开发人员快速生成与数据库表对应的实体类、Mapper接口和映射配置。*/
    public String text(){
        String url="jdbc:mysql://127.0.0.1:3306/cs";
        String username="root";
        String password="000000";

        /*FastAutoGenerator 需要导入mybatis-plus-generator包*/
        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("zgl") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir("D://main//java"); // 指定输出目录
                })
                .dataSourceConfig(builder -> builder.typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                    int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                    if (typeCode == Types.SMALLINT) {
                        // 自定义类型转换  将数据库中的SMALLINT类型转换成了Java的INTEGER类型。
                        return DbColumnType.INTEGER;
                    }
                    return typeRegistry.getColumnType(metaInfo);

                }))
                .packageConfig(builder -> {
                    builder.parent("com.txc.mybatisplus.samples.generator") // 设置父包名    5个文件夹,因为使用了 .
                            .moduleName("system") // 设置父包模块名 这个又是一个文件夹用来存储代码生成的文件
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "D://main//resources")); // 设置mapperXml生成路径

                })
                .strategyConfig(builder -> {
                    builder.addInclude("student") // 设置需要生成的表名
                            .addTablePrefix("t_", "c_","stu_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();

        return "代码生成成功";
    }

}

代码生成器是一个用于自动生成Java代码和MyBatis映射文件(XML文件)的工具,可以帮助开发人员快速生成与数据库表对应的实体类、Mapper接口和映射配置。

在MyBatis-Plus中,代码生成器是MyBatis-Plus工具集的一部分,提供了一套简单易用的代码生成器,使得开发人员可以非常方便地生成基础的数据访问层代码。

使用MyBatis-Plus的代码生成器,您需要先完成以下步骤:

    配置数据库连接信息:在配置文件中指定数据库连接地址、用户名、密码等信息。

    配置生成器参数:通过设置生成器参数,指定需要生成的表、生成文件输出路径、生成文件的命名规则等信息。

    编写模板文件:根据项目需求编写模板文件,定义生成的代码结构和格式。

当您完成以上步骤后,就可以启动代码生成器来生成代码了。代码生成器会读取数据库表的结构信息,根据模板文件和生成器参数,自动生成与数据库表对应的Java类、Mapper接口和XML映射文件。生成的代码包括了基本的CRUD操作,可直接应用到项目中。

代码生成器还提供了其他功能,如:

    自动生成DTO(数据传输对象)、Service接口等文件,以及自定义模板文件。

    自动识别数据库表之间的关联关系,并生成相应的代码。

    自动添加注释和日志等信息,提高代码的可读性和可维护性。

总之,代码生成器是一个能够自动生成基础数据访问层代码、提高开发效率的工具。它可以帮助开发人员减少手动编写代码的工作量,保证代码的一致性和规范性,加快项目开发进度。

代码生成器的优点包括:

   1. 提高开发效率:通过自动化生成基础代码,减少了重复劳动和手动编写代码的时间,使开发人员可以将更多精力投入到业务逻辑的开发上。

    2.保证代码一致性:生成的代码基于统一的模板和配置信息,可以保证生成的代码具有一致的格式和规范,避免了因人为因素导致的代码风格不一致问题。

    3.减少错误率:手动编写代码容易出现疏漏和错误,而代码生成器能够根据表结构自动生成代码,减少了人为错误的可能性。

    4.易于维护和更新:当数据库表结构发生变化时,只需重新运行代码生成器即可更新生成的代码,无需手动修改大量代码。

然而,代码生成器也存在一些缺点,包括:

    学习成本:需要花时间学习和理解代码生成器的配置和模板文件的编写,对于新手来说可能需要一定的学习成本。

    灵活性受限:生成的代码受限于模板文件的定义,可能无法完全满足特定的业务需求,需要额外的手动修改和扩展。

    可维护性:生成的代码可能过于“机械化”,缺乏一定的智能性和灵活性,可能导致生成的代码结构过于僵化,不易维护和扩展。

综上所述,代码生成器在提高开发效率和保证代码质量方面有着明显的优势,但也需要注意学习成本和灵活性受限这些缺点,并在实际项目中权衡利弊,选择合适的使用方式。

 Controller:StudentController

package com.example.mybatisplus1130.controller;

import com.example.mybatisplus1130.bean.Student;
import com.example.mybatisplus1130.service.StudentService;
import com.example.mybatisplus1130.service.DmscService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
public class StudentController {

    @Autowired(required = false)
    StudentService studentService;

    @Autowired(required = false)
    DmscService dmsc;


    /*使用的是MyBatisPluse 自带的API封装无需写Sql*/
    @ResponseBody
    @RequestMapping("/findAll")
    public List<Student> findAllStudent(){
        return studentService.findAllStudent();
    }

    /*和上面一样无需写sql的,这个只是多了条件判断及条件构造器(Wrapper)*/
    @ResponseBody
    @RequestMapping("/findAll_Wrapper")
    public List<Student> findAllStudent_Wrapper(){
        return studentService.findAllStudent_Wrapper("zgl","男");
    }


/*写sql语句    之使用   注解写sql操作数据库*/
    @ResponseBody
    @RequestMapping("/findAll-zj")
    public List<Student> findAllStudent_zj(){
        return studentService.findAllByStu_name("zgl");
    }

/*写sql语句    之使用   XML写sql操作数据库*/
    @ResponseBody
    @RequestMapping("/findAll-zj-by-xml")
    public List<Student> findAllStudent_zjByXml(){
        return studentService.findAllByStu_name_ByXml("zgl");
    }




    /*代码生成器*/
    /*无需记忆 需要知道有这个功能(代码生成器)  需要知道导入那些包可以实现这个逆向工程*/
    @ResponseBody
    @RequestMapping("/nxgc")
    public String daimashengcheng(){
        String result = dmsc.text();
        return result;
    }

    /*

    我们使用
    DmscService dmsc; 的String result = dmsc.text();替代
    DmscService service = new DmscService();
    String result = service.text();

    在使用 DmscService dmsc 的方式时,需要先通过 Spring 容器将 DmscService 类的实例化对象注入到控制器中,
    这通常是通过在 DmscService 类上添加 @Service 注解,在控制器类中添加 @Autowired 注解来实现的。
    * */


    /*

代码生成器是一个用于自动生成Java代码和MyBatis映射文件(XML文件)的工具,可以帮助开发人员快速生成与数据库表对应的实体类、Mapper接口和映射配置。

在MyBatis-Plus中,代码生成器是MyBatis-Plus工具集的一部分,提供了一套简单易用的代码生成器,使得开发人员可以非常方便地生成基础的数据访问层代码。

使用MyBatis-Plus的代码生成器,您需要先完成以下步骤:

    配置数据库连接信息:在配置文件中指定数据库连接地址、用户名、密码等信息。
    配置生成器参数:通过设置生成器参数,指定需要生成的表、生成文件输出路径、生成文件的命名规则等信息。
    编写模板文件:根据项目需求编写模板文件,定义生成的代码结构和格式。

当您完成以上步骤后,就可以启动代码生成器来生成代码了。代码生成器会读取数据库表的结构信息,根据模板文件和生成器参数,自动生成与数据库表对应的Java类、Mapper接口和XML映射文件。生成的代码包括了基本的CRUD操作,可直接应用到项目中。

代码生成器还提供了其他功能,如:

    自动生成DTO(数据传输对象)、Service接口等文件,以及自定义模板文件。
    自动识别数据库表之间的关联关系,并生成相应的代码。
    自动添加注释和日志等信息,提高代码的可读性和可维护性。

总之,代码生成器是一个能够自动生成基础数据访问层代码、提高开发效率的工具。它可以帮助开发人员减少手动编写代码的工作量,保证代码的一致性和规范性,加快项目开发进度。


代码生成器的优点包括:

    提高开发效率:通过自动化生成基础代码,减少了重复劳动和手动编写代码的时间,使开发人员可以将更多精力投入到业务逻辑的开发上。
    保证代码一致性:生成的代码基于统一的模板和配置信息,可以保证生成的代码具有一致的格式和规范,避免了因人为因素导致的代码风格不一致问题。
    减少错误率:手动编写代码容易出现疏漏和错误,而代码生成器能够根据表结构自动生成代码,减少了人为错误的可能性。
    易于维护和更新:当数据库表结构发生变化时,只需重新运行代码生成器即可更新生成的代码,无需手动修改大量代码。

然而,代码生成器也存在一些缺点,包括:

    学习成本:需要花时间学习和理解代码生成器的配置和模板文件的编写,对于新手来说可能需要一定的学习成本。
    灵活性受限:生成的代码受限于模板文件的定义,可能无法完全满足特定的业务需求,需要额外的手动修改和扩展。
    可维护性:生成的代码可能过于“机械化”,缺乏一定的智能性和灵活性,可能导致生成的代码结构过于僵化,不易维护和扩展。

综上所述,代码生成器在提高开发效率和保证代码质量方面有着明显的优势,但也需要注意学习成本和灵活性受限这些缺点,并在实际项目中权衡利弊,选择合适的使用方式。


   */





}

点击:

 

运行就可以了

测试:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1275827.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【STM32】EXTI外部中断

1 中断系统 1.1 中断简介 中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续运行。 比如&a…

密码学实验三

第一题&#xff1a; 寻找满足特定条件的 e&#xff1b; 第一步&#xff1a; 第二步&#xff1a; 由式1.7知&#xff0c;给定e,p,q&#xff0c;就可计算出相应的RSA不动点的数目。因此设计算法步骤如下&#xff1a; 枚举找出所有与φ(n)互素的e。枚举所有满足条件的e&#xff…

c语言:模拟实现atoi函数

atoi函数的功能和用法&#xff1a; 主要功能&#xff1a;将字符串转换为整数。例如&#xff0c;将字符类型的“123”转换为整数123. #include <stdio.h> #include <stdlib.h>int main() {char str[] "123";int num atoi(str);printf("Converted …

刷题笔记12.01 贪心策略

P1090 [NOIP2004 提高组] 合并果子 / [USACO06NOV] Fence Repair G - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 说最大不超过.不用高精度,好说 #include <bits/stdc.h> using namespace std; int n,n2,a; long long a1[10004],a2[10004],sum; int main() {ios::sync_…

C++-设计一个特殊类

目录 一.设计一个类&#xff0c;不能被拷贝 二.设计一个类只能在堆上创建对象 三.设计一个类只能在栈上创建对象 四. 请设计一个类&#xff0c;不能被继承 五.请设计一个类&#xff0c;只能创建一个对象(单例模式) 1.单例模式&#xff1a; 2. 饿汉模式 一.设计一个类&#x…

C#中GDI+绘图应用(柱形图、折线图和饼形图)

目录 一、柱形图 1.示例源码 2.生成效果 二、折线图 1.示例源码 2.生成效果 三、饼形图 1.示例源码 2.生成效果 GDI绘制的一些常用的图形&#xff0c;其中包括柱形图、折线图和饼形图。 一、柱形图 柱形图也称为条形图&#xff0c;是程序开发中比较常用的一种图表技术…

【AI】数据集Dataloader制作

以花朵分类的数据集来进行测试。 Oxford 102 Flowers Dataset 是一个花卉集合数据集&#xff0c;主要用于图像分类&#xff0c;它分为 102 个类别共计 102 种花&#xff0c;其中每个类别包含 40 到 258 张图像。 该数据集由牛津大学工程科学系于 2008 年发布&#xff0c;相关论…

[原创]Delphi的SizeOf(), Length(), 动态数组, 静态数组的关系.

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XXQQ: 643439947 个人网站: 80x86汇编小站 https://www.x86asm.org 编程生涯: 2001年~至今[共22年] 职业生涯: 20年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi…

中学老师求职简历(精选9篇)

以下简历内容以中学老师招聘需求为背景&#xff0c;我们整理并修改了9篇全面、专业且具有参考价值的简历案例&#xff0c;大家可以灵活借鉴&#xff0c;希望能帮助大家在众多候选人中脱颖而出。 中学老师简历下载&#xff08;可在下制作下载&#xff09;&#xff1a;百度幻主简…

表的创建和管理

表的创建和管理 一条数据的存储过程标识符的命名规则MySQL中的数据类型管理和创建数据库创建数据库使用数据库修改数据库 创建表创建方式1创建方式2查看数据表结构 修改表追加一个列修改一个列重命名一个列删除一个列 重命名表删除表清空表 一条数据的存储过程 存储数据是处理数…

pycharm closing卡住 解决办法

别处看到的&#xff0c;亲测有效 1.升级 pycharm 到 2023.3 2.pycharm 主页 Help -> Find Action -> 输入 Registry -> 禁用ide.await.scope.completion PyCharm 2023.1.2版本关闭后一直显示正在关闭项目 - 知乎

CentOS系统环境搭建(二十一)——安装git并且配置ssh拉取github代码

centos系统环境搭建专栏&#x1f517;点击跳转 文章目录 安装git并且配置ssh拉取github代码1.git初始配置2.设置ssh3.设置GitHub4.拉取代码 安装git并且配置ssh拉取github代码 1.git初始配置 安装 yum install git验证 git --version配置用户名&#xff08;记得用你自己的…

C++中异常的栈展开概念

C中的异常栈展开是指&#xff0c;当某个函数中有异常产生&#xff08;这里不考虑是主动抛出的还是被动产生的&#xff09;&#xff0c;在异常被捕获之前的函数调用链上&#xff0c;函数不会正常执行返回&#xff0c;即异常产生之后的程序逻辑不会被执行。 &#xff08;注意&…

HarmonyOS开发准备(一) TypeScript基本语法

HarmonyOS开发准备(一) TypeScript基本语法 TypsScript官网&#xff1a;https://www.typescriptlang.org/play 可在官网 Playround 在线运行 Typescript 一、变量声明 // 创建 number(数值) 类型变量 let test_number: number 111 console.log(test_number&#xff1a;, tes…

教你把ChatGPT训练抖音爆款文案(附提示词)

刚好有圈子同学问到&#xff1a;如何把ChatGPT训练成1个抖音爆款写手&#xff0c;相信很多小伙伴日常也存在类似需求&#xff0c;用好一个GPT&#xff0c;让月薪5K的小助理快速变成3万月薪的运营。本期就给大家安排一期ChatGPT教程。接下来手把手演示ChatGPT调教和提示词方式一…

福州大学《嵌入式系统综合设计》实验十三:RTSP拉流与RTMP推流

一、实验目的 掌握基于算能平台的JPEG压缩编码方法以及开发环境&#xff0c;包括开发主机环境搭建&#xff0c;硬件嵌入式开发板的连接&#xff0c;云平台的配置&#xff0c;编码程序的编译、运行等。 二、实验内容 搭建实验开发环境&#xff0c;并编写静止图像jpeg格式编解…

如何在Python中对Dynamsoft Barcode Reader性能进行基准测试

Dynamsoft Barcode Reader SDK一款多功能的条码读取控件&#xff0c;只需要几行代码就可以将条码读取功能嵌入到Web或桌面应用程序。这可以节省数月的开发时间和成本。能支持多种图像文件格式以及从摄像机或扫描仪获取的DIB格式。使用Dynamsoft Barcode Reader SDK&#xff0c;…

ThinkPHP 2.x任意代码执行漏洞

任务一&#xff1a; 复现环境中的代码漏洞 任务二&#xff1a; 尝试利用代码执行漏洞读取服务器web目录下的文件列表。 任务一&#xff1a; 1.搭建环境&#xff1a; 2.在php环境下直接输入{${phpinfo}}测试代码片段 2.写入一句话木马&#xff0c;用antsword连接&#xff0…

Java数据结构之《循环队列》题目

一、前言&#xff1a; 这是怀化学院的&#xff1a;Java数据结构中的一道难度中等的一道编程题(此方法为博主自己研究&#xff0c;问题基本解决&#xff0c;若有bug欢迎下方评论提出意见&#xff0c;我会第一时间改进代码&#xff0c;谢谢&#xff01;) 后面其他编程题只要我写完…

夯实c基础

夯实c基础 区别&#xff1a; 图一的交换&#xff0c;&#xff08;交换的是地址而不是两数&#xff09;无法实现两数的交换。 题干以下程序的输出结果为&#xff08; c  &#xff09;。 void fun(int a, int b, int c){ ca*b; } void main( ){ int…