一、前言
题外话:Mybatis-Plus从3.0版本开始,已经支持国产达梦数据库了,那已经是18年的事情了。
这篇文章我们来介绍一下,Mybatis-Plus代码生成器,版本是最新版的3.5.1。以下内容仅适用 3.5.1 以上版本,对历史版本的不兼容。
二、正文
1. pom依赖
主要依赖是mybatis-plus代码生成器和freemark模板引擎,其他不重要。
<dependencies>
<!--SpringBoot Web-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>5.1.47</version>
</dependency>
<!--Druid数据库连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.3.4</version>
</dependency>
<!--mybatis-plus代码生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.1</version>
</dependency>
<!--freemark模板引擎-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<!--hutool工具包-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.12</version>
</dependency>
<!--knife4j-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId>
<version>3.0.2</version>
</dependency>
<!--基础三剑客-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
2. 项目结构
3. 重头戏来了,AutoCodeGenerator类
AutoCodeGenerator类是我在项目中创建的专门用来配置及进行代码生成的类,里面所有的配置项皆是研读官网文档,结合实际进行配置的,后续可随时根据官网文档进行修改。
其中所有的配置项几乎到增加了注释,因此不再过多解释,可直接看以下具体代码。
package com.ieslab.knife4j.demo.module.generator;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
/**
* @Author: zongshaofeng
* @Description:
* @Date:Create:in 2021/11/03 23:29
* @Modified By:
*/
public class AutoCodeGenerator {
public static void main(String[] args) {
// 数据库配置
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig
.Builder("jdbc:mysql://localhost:3306/test" +
"?useSSL=false&allowMultiQueries=true&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true"
, "root", "root");
FastAutoGenerator.create(dataSourceConfigBuilder)
// 全局配置
.globalConfig((scanner, builder) -> {
builder.author(scanner.apply("请输入作者名称?"))
// 覆盖已生成文件
.fileOverride()
// 指定输出目录
.outputDir(System.getProperty("user.dir") + "/src/main/java/")
// 开启 swagger 模式
.enableSwagger()
// 禁止打开输出目录
.disableOpenDir()
// 时间策略
.dateType(DateType.TIME_PACK)
// 类注释日期的格式
.commentDate("yyyy-MM-dd HH:mm:ss")
.build();
})
// 包配置
.packageConfig((scanner, builder) -> {
// 父包名
builder.parent(scanner.apply("请输入父包名?"))
// 模块名
.moduleName(scanner.apply("请输入模块名?"))
// Entity 包名
.entity("entity")
// Service 包名
.service("service")
// Service Impl 包名
.serviceImpl("serviceImpl")
// Controller 包名
.controller("controller")
// Mapper 包名
.mapper("dao")
// MapperXML 包名
.xml("mapper")
// 路径配置信息
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir") + "/src/main/resources/mapper/"));
})
//策略配置
.strategyConfig((scanner, builder) -> {
// 增加表匹配(内存过滤), include 与 exclude 只能配置一项
builder.addInclude(getTables(scanner.apply("请输入要生成的表名,多个英文逗号分隔?所有输入 all")))
// 增加表排除匹配(内存过滤), include 与 exclude 只能配置一项
// .addExclude(scanner.apply("请输入要忽略的表名,多个英文逗号分隔?"))
// 增加过滤表后缀
.addTableSuffix("")
// 增加过滤表前缀
.addTablePrefix("")
// service 策略配置
.serviceBuilder()
// 格式化文件名称
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")
// 实体策略配置
.entityBuilder()
// 开启 lombok 模型
.enableLombok()
// 开启生成实体时生成字段注解
.enableTableFieldAnnotation()
// controller 策略配置
.controllerBuilder()
.formatFileName("%sController")
// 开启生成@RestController 控制器
.enableRestStyle()
// mapper 策略配置
.mapperBuilder()
// 设置父类
.superClass(BaseMapper.class)
.formatMapperFileName("%sMapper")
.enableMapperAnnotation()
.formatXmlFileName("%sMapper");
})
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
/**
* 处理 all 情况
*
* @param tables
* @return
*/
protected static List<String> getTables(String tables) {
return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(","));
}
}
4. 演示代码生成
然后再次回车,就可以完成代码生成了。
5. 最终生成的模块
三、总结
Mybatis-Plus新版本的代码生成器,相对于历史版本而言要更加的清晰简单。
水贴。