从零搭建SpringBoot后台框架(八)——集成mybatis-plus-generator

222 阅读4分钟

一、添加所需依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3.2</version>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <version>1.18.30</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <scope>test</scope>
</dependency>
  1. 代码生成器(新)仅需引入mybatis-plus-generator即可
  2. 因本文使用freemarker模板,所以需要引入spring-boot-starter-freemarker
  3. 因本文生成模板使用了lombok,所以需要引入lombok依赖,另外Idea需要安装lombok插件才能正常工作
  4. 自动生成器配置在测试模块中,所以引入了junit依赖

二、创建系统日志表

CREATE TABLE `system_log` (
  `id` bigint(20) NOT NULL,
  `description` varchar(50) DEFAULT NULL COMMENT '日志信息描述',
  `method` varchar(20) DEFAULT NULL COMMENT '方法名称',
  `log_type` varchar(10) DEFAULT NULL COMMENT '日志类型 0是正常,1是异常',
  `request_ip` varchar(30) DEFAULT NULL COMMENT '请求的ip',
  `exception_code` varchar(50) DEFAULT NULL COMMENT '异常错误码',
  `exception_detail` varchar(255) DEFAULT NULL COMMENT '异常详情',
  `params` varchar(1000) DEFAULT NULL COMMENT '请求参数',
  `user_id` varchar(32) DEFAULT NULL COMMENT '请求的用户id',
  `delete_flag` tinyint(4) NOT NULL DEFAULT '0' COMMENT '是否删除:0-否,1-是',
  `create_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `created_by` varchar(128) DEFAULT '' COMMENT '创建人',
  `update_time` datetime DEFAULT CURRENT_TIMESTAMP COMMENT '最后修改时间',
  `updated_by` varchar(128) DEFAULT '' COMMENT '最后修改人',
  `version` int(8) DEFAULT '0' COMMENT '版本号',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='系统日志表'

三、创建src\test\java\com\example\demo\config\MybatisPlusGenerator.java

package com.example.demo.config;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import org.junit.Test;

import java.sql.Types;
import java.util.*;

public class MybatisPlusGenerator {
    private static final String DB_URL = "jdbc:mysql://localhost:3306/demo?useSSL=false";
    private static final String DB_USERNAME = "root";
    private static final String DB_PASSWORD = "123456";
    private static final List<String> TABLES = Arrays.asList(
            //"user_info",
            "system_log"
    );
    private static final String AUTHOR = "chenzl";
    private static final String PKG_PARENT = "com.example.demo";
    private static final String PKG_ENTITY = "model";
    private static final String PKG_MAPPER = "dao";

    /**
     * 数据源配置
     */
    private static final DataSourceConfig DATA_SOURCE_CONFIG = new DataSourceConfig.Builder(DB_URL, DB_USERNAME, DB_PASSWORD)
            //数据库 schema(部分数据库适用)  mybatis-plus
            //.schema("demo")
            .typeConvertHandler((globalConfig, typeRegistry, metaInfo) -> {
                int typeCode = metaInfo.getJdbcType().TYPE_CODE;
                if (typeCode == Types.SMALLINT) {
                    // 自定义类型转换
                    return DbColumnType.INTEGER;
                }
                return typeRegistry.getColumnType(metaInfo);
            })
            .build();

    private static final GlobalConfig GLOBAL_CONFIG = new GlobalConfig.Builder()
            //禁止打开输出目录 默认值:true
            .disableOpenDir()
            //指定输出目录
            .outputDir(System.getProperty("user.dir") + "/src/main/java")
            //设置作者
            .author(AUTHOR)
            //开启swagger模式
            .enableSwagger()
            //时间策略 DateType.ONLY_DATE 默认值: DateType.TIME_PACK
            //.dateType(DateType.TIME_PACK)
            //注释日期 默认值: yyyy-MM-dd
            //.commentDate("yyyy-MM-dd HH:mm:ss")
            .build();

    private static final PackageConfig PACKAGE_CONFIG = new PackageConfig.Builder()
            //设置父包名
            .parent(PKG_PARENT)
            //父包模块名    默认值:无
            //.moduleName("demo")
            .entity(PKG_ENTITY)
            //Mapper包名 默认值:mapper
            .mapper(PKG_MAPPER)
            //设置mapperXml生成路径
            .pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mapper"))
            .build();

    private static final StrategyConfig STRATEGY_CONFIG = new StrategyConfig.Builder()
            // 设置需要生成的表名
            .addInclude(TABLES)
            // 设置过滤表前缀
            //.addTablePrefix("t_")

            //controller配置
            .controllerBuilder()
            //覆盖已生成文件
            .enableFileOverride()
            //开启生成@RestController 控制器  默认值:false
            .enableRestStyle()

            //service配置
            .serviceBuilder()
            //覆盖已生成文件
            .enableFileOverride()
            .convertServiceFileName((entityName) -> entityName + "Service")
            .convertServiceImplFileName((entityName) -> entityName + "ServiceImpl")

            //mapper配置
            .mapperBuilder()
            //覆盖已生成文件
            .enableFileOverride()
            //启用 BaseResultMap 生成  默认值:false
            .enableBaseResultMap()
            //启用 BaseColumnList    默认值:false
            .enableBaseColumnList()
            //转换 mapper 类文件名称   默认值:%sMapper
            //.convertMapperFileName((entityName) -> entityName + "Mapper")
            //转换 xml 文件名称  默认值:%sMapper
            //.convertXmlFileName((entityName) -> entityName + "Mapper")

            //entity配置
            .entityBuilder()
            //覆盖已生成文件
            .enableFileOverride()
            //禁用生成 serialVersionUID    默认值:true
            .disableSerialVersionUID()
            //开启lombok模型   默认值:false
            .enableLombok()
            //开启Boolean类型字段移除is前缀  默认值:false mysql 数据库字段类型为tinyint(1)时,会自动转换为Boolean类型
            .enableRemoveIsPrefix()
            //乐观锁字段名(数据库字段)    versionColumnName与versionPropertyName二选一即可
            .versionColumnName("version")
            //逻辑删除字段名(数据库字段)   logicDeleteColumnName与logicDeletePropertyName二选一即可
            .logicDeleteColumnName("delete_flag")
            //转换文件名称
            //.convertFileName((entityName) -> entityName + "PO")
            //格式化文件名称
            //.formatFileName("%sPO")
            //全局主键类型
            .idType(IdType.ASSIGN_ID)
            .addTableFills(Arrays.asList(
                    new Column("create_time", FieldFill.INSERT),
                    new Column("created_by", FieldFill.INSERT),
                    new Column("update_time", FieldFill.INSERT_UPDATE),
                    new Column("updated_by", FieldFill.INSERT_UPDATE)
            ))

            .build();

    @Test
    public void execute() {
        AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
        generator.global(GLOBAL_CONFIG);
        generator.packageInfo(PACKAGE_CONFIG);
        generator.strategy(STRATEGY_CONFIG);
        // 使用Freemarker引擎模板,默认的是Velocity引擎模板
        generator.execute(new FreemarkerTemplateEngine());
    }
}
  1. tag对应的代码中为idType(IdType.AUTO),后续修改为idType(IdType.ASSIGN_ID),直接使用默认的雪花算法生成id,若拉取tag代码,记得修改一下idType。

四、功能测试

运行com.example.demo.config.MybatisPlusGenerator#execute 查看日志:

16:01:43.464 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/entity.java.ftl;  文件:E:\demo\src\main\java\com\example\demo\model\SystemLog.java
16:01:43.470 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/mapper.java.ftl;  文件:E:\demo\src\main\java\com\example\demo\dao\SystemLogMapper.java
16:01:43.480 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/mapper.xml.ftl;  文件:E:\demo\src\main\resources\mapper\SystemLogMapper.xml
16:01:43.488 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/service.java.ftl;  文件:E:\demo\src\main\java\com\example\demo\service\SystemLogService.java
16:01:43.495 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/serviceImpl.java.ftl;  文件:E:\demo\src\main\java\com\example\demo\service\impl\SystemLogServiceImpl.java
16:01:43.541 [main] DEBUG com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine - 模板:/templates/controller.java.ftl;  文件:E:\demo\src\main\java\com\example\demo\controller\SystemLogController.java
16:01:43.541 [main] DEBUG com.baomidou.mybatisplus.generator.AutoGenerator - ==========================文件生成完成!!!==========================

Process finished with exit code 0

image.png

创建成功

五、项目地址

gitee

PS:可以通过tag下载本文对应的代码版本

六、结尾

mybaits plus generator集成已完成,有问题可以联系chenzhenlindx@qq.com

七、参考文章

  1. 从零搭建自己的SpringBoot后台框架(九)
  2. 代码生成器配置新
  3. 代码生成器(新)