SpringBoot基于Mybatis-Plus自动代码生成

下面是关于“Spring Boot基于Mybatis-Plus自动代码生成”的完整攻略:

1. 简介

Mybatis-Plus是Mybatis的一个开源插件,提供了许多功能,例如自动代码生成、通用CRUD操作、分页和逻辑删除等。通过Spring Boot和Mybatis-Plus的结合,我们可以快速构建高效的数据库操作应用程序。

2. 步骤

2.1 配置pom.xml

在pom.xml文件中添加如下依赖:

<!--Spring Boot-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<!--MyBatis-->
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

<!--MyBatis-Plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.2</version>
</dependency>

或者可以在MyBatis-Plus官网下载代码生成器,添加依赖后,使用IDEA导入项目,执行代码生成。

2.2 配置application.yml

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver

mybatis-plus:
  global-config:
    db-config:
      id-type: auto
      table-prefix: t_
    sql-injector: com.baomidou.mybatisplus.injector.LogicSqlInjector
  configuration:
    map-underscore-to-camel-case: true
    cache-enabled: false
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  mapper-locations: classpath:/mapper/**/*.xml

配置DB连接和Mybatis-Plus属性。

2.3 代码生成器

在Mybatis-Plus中,我们可以使用代码生成器生成entity、mapper、service、controller等相关代码,大大提高我们的开发效率。

可以使用命令行生成:

public class CodeGenerator {

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator generator = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        gc.setAuthor("jhucbs");
        gc.setOpen(false);
        gc.setSwagger2(true);
        generator.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/mp?useUnicode=true&useSSL=false&characterEncoding=utf8&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai&useInformationSchema=true");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        generator.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName(null);
        pc.setParent("com.baomidou.mybatisplus.samples.generator");
        generator.setPackageInfo(pc);
        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输入文件名称
                return System.getProperty("user.dir")
                        + "/src/main/resources/mapper/" 
                        + tableInfo.getEntityName() 
                        + "Mapper" 
                        + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        generator.setCfg(cfg);
        // 配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        generator.setTemplate(templateConfig);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        // 公共父类
//        strategy.setSuperControllerClass("com.baomidou.mybatisplus.samples.generator.common.BaseController");
//        strategy.setSuperEntityClass("com.baomidou.mybatisplus.samples.generator.common.BaseEntity");
        // 写于父类中的公共字段
//        strategy.setSuperEntityColumns("id");
        strategy.setInclude("user");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix("mp_");
        generator.setStrategy(strategy);
        generator.execute();
    }
}

或者使用界面操作,可以在Mybatis-Plus中启动图形化界面,在其中为每张表选择代码生成器的选项并进行代码生成。

3. 示例

我们这里提供两个示例:

3.1 示例1:生成单个表的Entity与Mapper

我们假设我们有一张名为student的数据表,其中包含了以下字段:

id          bigint(20)      主键
name        varchar(20)     学生姓名
age         tinyint(4)      学生年龄
sex         varchar(10)     学生性别
address     varchar(100)    学生地址

我们可以按照如上步骤先配置好项目,然后在配置好了代码生成器后,执行以下代码:

public class CodeGenerator {

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator generator = new AutoGenerator();
        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        gc.setAuthor("jhucbs");
        gc.setOpen(false);
        gc.setSwagger2(true);
        generator.setGlobalConfig(gc);
        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        generator.setDataSource(dsc);
        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.demo");
        pc.setEntity("entity");
        pc.setMapper("mapper");
        generator.setPackageInfo(pc);
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);
        strategy.setInclude("student");
        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix("t_");
        generator.setStrategy(strategy);
        generator.execute();
    }
}

执行此代码后,即可生成与student表对应的entity与mapper文件。

3.2 示例2:生成多张表的实体对象

假设我们有两张名为student和teacher的数据表,且均包含上面所示字段。那我们只需要在代码生成器的策略配置中添加后缀名为"_base"的名称即可同时生成这两个表对应的Entity对象。

public class CodeGenerator {

    public static void main(String[] args) {
        // 代码生成器
        AutoGenerator generator = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(System.getProperty("user.dir") + "/src/main/java");
        gc.setAuthor("jhucbs");
        gc.setOpen(false);
        gc.setSwagger2(true);
        generator.setGlobalConfig(gc);

        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/test?serverTimezone=UTC&useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("root");
        generator.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        pc.setParent("com.example.demo");
        pc.setEntity("entity");
        pc.setMapper("mapper");

        // 在此处添加要生成的表名
        pc.setModuleName("student","teacher");

        generator.setPackageInfo(pc);

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        strategy.setEntityLombokModel(true);
        strategy.setRestControllerStyle(true);

        // 在此处添加要生成的表名
        strategy.setInclude("student","teacher");

        strategy.setControllerMappingHyphenStyle(true);
        strategy.setTablePrefix("t_");
        generator.setStrategy(strategy);

        generator.execute();
    }
}

执行此代码后,即可生成student和teacher表对应的Entity对象。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot基于Mybatis-Plus自动代码生成 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Java Apache POI报错“MissingSheetException”的原因与解决办法

    “MissingCellDataException”是Java的Apache POI类库中的一个异常,通常由以下原因之一引起: 单元格错误:如果单元格中缺少数据,则可能会出现此异常。例如,可能会尝试读取不存在的单元格或尝试读取未填充的单元格。 以下是两个实例: 例1 如果单元格中缺少数据,则可以尝试使用正确的单元格以解决此问题。例如,在Java中,可以使用以…

    Java 2023年5月5日
    00
  • Spring JPA的实体属性类型转换器并反序列化工具类详解

    Spring JPA实体属性类型转换器并反序列化工具类详解 背景介绍 在开发中,我们经常会用到Spring Data JPA(Java Persistence API)来访问数据库并进行数据持久化,而在实际开发中,我们会面临很多原本无法直接与数据库进行映射的数据类型。这时候我们需要将其转换为数据库可以映射的类型进行存储操作。针对这一问题,Spring提供了很…

    Java 2023年5月20日
    00
  • 实现将Web应用部署到Tomcat根目录的三种方法

    当我们开发一个Web应用并且想要将其部署到Tomcat服务器的根目录时,可以采用以下三种方法: 方法一:部署WAR包到Tomcat的webapps目录下 使用Maven或Gradle等构建工具将Web应用打包成WAR包,或手动打包成WAR包。 将WAR包重命名为ROOT.war,并将其复制到Tomcat的webapps目录下。 启动Tomcat服务器,Tom…

    Java 2023年5月19日
    00
  • java使用JDBC连接数据库的五种方式(IDEA版)

    下面是对“Java使用JDBC连接数据库的五种方式(IDEA版)”的完整攻略: 一、使用JDBC连接数据库的五种方式 1.1 方式一:使用Class.forName方式连接 使用Class.forName方式连接数据库需要导入jdbc驱动jar包,代码示例: // 加载MySql数据库驱动程序 Class.forName("com.mysql.jd…

    Java 2023年5月19日
    00
  • Apache Hudi结合Flink的亿级数据入湖实践解析

    下面我来详细讲解一下Apache Hudi结合Flink的亿级数据入湖实践解析的完整攻略。 概述 本文主要介绍如何使用Apache Hudi和Flink实现亿级数据的入湖操作。Hudi是一个可靠的增量数据处理框架,适用于在Apache Spark等大数据处理框架上进行大数据增量计算。而Flink则是一个分布式流处理框架,具有高吞吐量和低延迟的特点。将两者结合…

    Java 2023年5月20日
    00
  • 深入理解Java中HashCode方法

    深入理解Java中HashCode方法 HashCode方法的概念和作用 HashCode是Java中的一个重要方法,它返回一个对象的hash值,即对象在内存中的地址的一个唯一标识符。在Java中,Hashtable、HashMap、HashSet等基于Hash算法实现的数据结构会使用对象的HashCode来确定对象在集合中的位置。因此,HashCode方法…

    Java 2023年5月26日
    00
  • 基于Java实现考试管理系统

    基于Java实现考试管理系统攻略 准备工作 首先,需要安装Java开发工具和MySQL数据库。常见的Java开发工具有Eclipse、IntelliJ IDEA等,可以根据个人喜好选择使用。同时还需要学习Java基础语法和SQL语句。 设计数据库表结构 考试管理系统需要存储的信息包括考生信息、考试科目信息、试卷信息、试题信息、考试成绩信息等。需要根据需求设计…

    Java 2023年5月19日
    00
  • MyBatis-Plus updateById更新不了空字符串或null的解决方法

    针对“MyBatis-Plus updateById更新不了空字符串或null的解决方法”的问题,我们可以采取以下步骤解决: 1. 前置准备 首先,我们需要明确一下 MyBatis-Plus 的 updateById 方法的定义: int updateById(T entity); 可以看到它接受一个实体对象,然后根据实体对象中的非空属性对数据库表进行更新操…

    Java 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部