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

什么是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接口等文件,以及自定义模板文件。
    自动识别数据库表之间的关联关系,并生成相应的代码。
    自动添加注释和日志等信息,提高代码的可读性和可维护性。

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


代码生成器的优点包括:

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

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

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

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


   */





}

点击:

 

运行就可以了

测试:

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《ChatGPT实操应用大全》探索无限可能

&#x1f5e3;️探索ChatGPT&#xff0c;开启无限可能&#x1f680; 文末有免费送书福利&#xff01;&#xff01;&#xff01; ChatGPT是人类有史以来最伟大的发明。他能写作、绘画、翻译、看病、做菜、编程、数据分析、制作视频、解高等数学题…&#xff0c;他会的技能…

FPGA 常用代码

边沿检测 Verilog边沿检测是数字电路设计中常用的方法之一。它是一种检测输入信号边沿变化的技术&#xff0c;用于实现时序控制、数据采集和数字信号处理等功能。其基本原理是通过触发器检测输入信号的状态变化&#xff0c;并触发相应的逻辑操作。 // 边沿检测模块 // 使用两…

docker踩坑记录:docker容器创建doris容器间无法通讯问题

背景&#xff1a; 开发大数据平台&#xff0c;使用doris作为数据仓储&#xff0c;使用docker做集群部署&#xff0c;先进行开发环境搭建&#xff0c;环境为BE1;FE1&#xff0c;原来使用官方例子&#xff0c;但是官方例子是创建了一个bridge使用172.20.80.0/24通讯&#xff0c;…

WPF Mvvm模式下面如何将事件映射到ViewModel层

前言 平常用惯了Command绑定,都快忘记传统的基于事件编程模式了,但是Commond模式里面有个明显的问题,就是你无法获取到事件源的参数。很多大聪明肯定会说,这还不简单,通过自己写控件,给控件加个自定义属性不就行了,想要啥事件就写啥事件进去,完全自主可控。但是对于写…

链式栈的结构与基本操作的实现(初始化,入栈,出栈,获取元素个数,判空,清空,销毁)

目录 一.链式栈的栈顶在哪里? 二.链栈的结构: 三.链式栈的实现: 四.链式栈的总结: 一.链式栈的栈顶在哪里? 二.链栈的结构: typedef struct LSNode{int data;struct LSNode* next;}LSNode ,*PLStack; //链栈的节点.由于栈顶在第一个数据节点,所以不需要top指针 三.链式…

基于SpringBoot高校心理教育辅导设计与实现

摘 要 随着Internet技术的发展&#xff0c;心理教育辅导系统应运而生&#xff0c;心理教育辅导系统为用户提供了一个更为便利的心理测试咨询平台。所以&#xff0c;为了充分满足高校学生心理教育辅导的需求&#xff0c;特开发了本高校心理教育辅导系统。 本高校心理教育辅导系统…

Python for循环及用法详解

for-in 循环专门用于遍历范围、列表、元素和字典等可迭代对象包含的元素。 for-in 循环的语法格式如下 for 变量 in 字符串&#xff5c;范围&#xff5c;集合等&#xff1a;statements 对于上面的语法格式有以下两点说明&#xff1a; for-in 循环中的变量的值受 for-in 循环控…

gstreamer移植

参考 arm-linux交叉编译Gstreamer&#xff08;重要&#xff09;gstreamer移植qnx(四)&#xff1a;交叉编译qnx版本的gstreamer插件库&#xff08;重要&#xff09;gstreamer交叉编译关于linux&#xff1a;GStreamer上的“黑名单”是什么意思&#xff1f;gstreamer 环境变亮设置…

PHP实践:用ThinkPHP6完整实现用户分页功能

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;CSDN领军人物&#xff0c;全栈领域优质创作者✌&#xff0c;CSDN博客专家&#xff0c;阿里云社区专家博主&#xff0c;2023年6月CSDN上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师…

太阳能路灯系统在道路照明中的应用

太阳能路灯作为一种极为科学和环保的光源利用形式&#xff0c;一直以来备受关注&#xff0c;但是&#xff0c;目前虽然有很多技术可以证明太阳能路灯的可行性&#xff0c;不过&#xff0c;如何真正的将太阳能路灯应用到道路照明之中&#xff0c;还是需要进行深入分析和探讨的。…

10个让UI设计更轻松的工具

UI设计软件对设计师来说非常重要。UI设计工具的使用是否直接影响到最终结果的质量&#xff0c;然后有人会问&#xff1a;UI界面设计使用什么软件&#xff1f;这里有一些UI设计师和那些对UI设计感兴趣的朋友列出了10个易于使用和免费的UI设计软件。 即时设计 即时设计是一款免…

腾讯云避坑——无法远程root登录

因为各种原因&#xff0c;最近需要使用腾讯云来代替阿里云。 但在ubuntu18/20的服务器中&#xff0c;我使用另一个电脑试图用scp命令来拷贝服务器中的一些文件&#xff0c;命令为: scp root服务器ip:文件目录 本地目录但一直显示密码错误。 原因是腾讯云ubuntu系统在创建时并不…

了解SpireCV如何利用G1吊舱进行点击跟踪

功能概述 SpireCV-SDK是一个专为智能无人系统打造的边缘实时感知SDK库。该库能够控制无人机的相机和吊舱&#xff0c;包括拍照、录像、推流等功能&#xff0c;并可以保存视频和进行推流。此外&#xff0c;SpireCV-SDK还集成了目标检测、识别与跟踪功能&#xff0c;以实现更智能…

关于加强型葡萄酒的类型有哪些?

加强型葡萄酒指的是在酿造过程中或酿造完后&#xff0c;添加酒精提高葡萄酒酒精度的葡萄酒&#xff0c;一般加强型葡萄酒的酒精度数都能达到15度以上。那么&#xff0c;云仓酒庄的品牌雷盛红酒分享加强型葡萄酒的类型有哪些呢&#xff1f; 云仓酒庄多品牌多代言运营模式&#…

量子光学的进步:光子学的“下一件小事”

量子光学是量子力学和光学交叉领域中发展迅速的一门学科&#xff0c;探索光的基本特性及其与物质在量子水平上的相互作用。通过利用光的独特特性&#xff0c;量子光学为通信、计算、密码学和传感等各个学科的变革性进步铺平了道路。 如今&#xff0c;量子光学领域的研究人员和工…

微信号被封了怎么办

13-7 常在河边走&#xff0c;哪有不湿鞋&#xff0c;做为经常用微信做电商客服的&#xff0c;或者经常在微信上和顾客谈钱的&#xff0c;总是会被微信后台重点关注&#xff0c;一不小心就有可能被封号。 如果遇到太倒霉的时候&#xff0c;永久封号了&#xff0c;这个时候微信…

基于SpringBoot的免税商品优选购物商城设计与实现

摘 要 随着科学技术的飞速发展&#xff0c;各行各业都在努力与现代先进技术接轨&#xff0c;通过科技手段提高自身的优势&#xff0c;免税商品优选购物商城当然也不能排除在外&#xff0c;随着购物商城的不断成熟&#xff0c;它彻底改变了过去传统的免税商品优选购物商城方式&…

FastDFS文件系统本地部署结合Nginx与内网穿透实现远程访问本地服务器

文章目录 前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx 2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.…

python之pyqt专栏10-键盘事件

需求 通过按键盘的上下左右&#xff0c;移动button的位置。 UI界面设计 代码 # 导入sys模块 import sysfrom PyQt6.QtCore import Qt # PyQt6.QtWidgets模块中导入QApplication, QWidget from PyQt6.QtWidgets import QApplication, QWidget# untitled模块中导入Ui_Form类 f…

高等数学中的近似计算

今天来总结一下同济版高数中有关近似计算的例子&#xff0c;总的来说是如下的三种&#xff0c;有遗漏的话可以在评论区指出~ 目录 一.微分在近似计算中的应用 二.全微分在近似计算中的应用 三.函数的幂级数展开在近似计算的应用 一.微分在近似计算中的应用 本质原理是&am…