#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)

枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)相关的知识,希望能为你提供帮助。
MyBatis-Plus 官方文档:https://mp.baomidou.com/guide/generator-new.html

#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)

文章图片

这是官网上的文档,从官方文档中给快速生成代码中,可以看出代码生成器的配置结构为:
//1、配置数据源 FastAutoGenerator.create("url", "username", "password") //2、全局配置 .globalConfig(...) //3、包配置 .packageConfig(...) //4、策略配置 .strategyConfig(...) //5、模板引擎配置 .templateEngine(...) //6、执行 .execute();

我们只需要通过填空的方式去配置数据源(DataSource),全局配置(GlobalConfig),包配置(PackageConfig),策略配置(StrategyConfig)和模板引擎配置(TemplateEngine)即可。
官方文档上也给出了对于每一个配置我们可以进行什么操作。
配置 数据源配置(DataSource)
属性 说明 示例
url jdbc路径 jdbc:mysql://127.0.0.1:3306/mybatis-plus
username 数据库账号 root
password 数据库密码 123456
dbQuery(IDbQuery) 数据库查询 new MySqlQuery()
schema(String) 数据库schema(部分数据库适用) mybatis-plus
typeConvert(ITypeConvert) 数据库类型转换器 new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler) 数据库关键字处理器 new MySqlKeyWordsHandler()
全局配置(GlobalConfig)
方法 说明 示例
fileOverride 覆盖已生成文件 默认值:false
disableOpenDir 禁止打开输出目录 默认值:true
outputDir(String) 指定输出目录 /opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
author(String) 作者名 baomidou 默认值:作者
enableKotlin 开启 kotlin 模式 默认值:false
enableSwagger 开启 swagger 模式 默认值:false
dateType(DateType) 时间策略 DateType.ONLY_DATE=Date 默认值: DateType.TIME_PACK=LocalDateTime
commentDate(String) 注释日期 默认值: yyyy-MM-dd
包配置(PackageConfig)
方法 说明 示例
parent(String) 父包名 默认值:com.baomidou
moduleName(String) 父包模块名 默认值:无
entity(String) Entity 包名 默认值:entity
service(String) Service 包名 默认值:service
serviceImpl(String) Service Impl 包名 默认值:service.impl
mapper(String) Mapper 包名 默认值:mapper
mapperXml(String) Mapper XML 包名 默认值:mapper.xml
controller(String) Controller 包名 默认值:controller
other(String) 自定义文件包名 输出自定义文件时所用到的包名
pathInfo(Map< OutputFile, String> ) 路径配置信息 Collections.singletonMap(OutputFile.mapperXml, " D://" )
策略配置(StrategyConfig)
方法 说明 示例
enableCapitalMode 开启大写命名 默认值:false
enableSkipView 开启跳过视图 默认值:false
disableSqlFilter 禁用 sql 过滤 默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
enableSchema 启用 schema 默认值:false,多 schema 场景的时候打开
likeTable(LikeTable) 模糊表匹配(sql 过滤) likeTable 与 notLikeTable 只能配置一项
notLikeTable(LikeTable) 模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
addInclude(String...) 增加表匹配(内存过滤) include 与 exclude 只能配置一项
addExclude(String...) 增加表排除匹配(内存过滤) include 与 exclude 只能配置一项
addTablePrefix(String...) 增加过滤表前缀
addTableSuffix(String...) 增加过滤表后缀
addFieldPrefix(String...) 增加过滤字段前缀
addFieldSuffix(String...) 增加过滤字段后缀
entityBuilder 实体策略配置
controllerBuilder controller 策略配置
mapperBuilder mapper 策略配置
serviceBuilder service 策略配置
模板引擎配置(TemplateEngine)
【#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)】默认 Velocity ;可选模板引擎 Beetl 或 Freemarker。
模板引擎 代码
Velocity 默认 .templateEngine(new VelocityTemplateEngine())
Freemarker 可选 .templateEngine(new FreemarkerTemplateEngine())
Beetl 可选 .templateEngine(new BeetlTemplateEngine())
代码生成器测试样例那么知道配置之后我们可以自己写一个操作一下。
步骤:
1、创建测试数据库 mp
CREATE DATABASE mp; USE `mp`; /*Table structure for table `student` */CREATE TABLE `student` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 学号, `name` varchar(50) DEFAULT NULL COMMENT 姓名, `score` double DEFAULT NULL COMMENT 成绩, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; /*Table structure for table `user` */CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 用户id, `username` varchar(50) NOT NULL COMMENT 用户名, `password` varchar(50) DEFAULT NULL COMMENT 密码, `create_time` date DEFAULT NULL COMMENT 创建时间, `modify_time` date DEFAULT NULL COMMENT 最后一次修改时间, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Field Type Comment
id int 用户id
username varchar(50) 用户名
password varchar(50) 密码
create_time date 创建时间
modify_time date 最后一次修改时间
Field Type Comment
id int 学号
name varchar(50) 名字
score double 成绩
2、创建一个 Spring-Boot 项目
#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)

文章图片

3、在 pom.xml 中导入相关依赖
< !--spring-boot--> < dependency> < groupId> org.springframework.boot< /groupId> < artifactId> spring-boot-starter-web< /artifactId> < /dependency> < !--SpringBootTest--> < dependency> < groupId> org.springframework.boot< /groupId> < artifactId> spring-boot-starter-test< /artifactId> < scope> test< /scope> < /dependency> < !--swagger--> < dependency> < groupId> io.swagger< /groupId> < artifactId> swagger-annotations< /artifactId> < version> 1.6.3< /version> < /dependency> < !--lombok--> < dependency> < groupId> org.projectlombok< /groupId> < artifactId> lombok< /artifactId> < /dependency> < !--mysql 驱动--> < dependency> < groupId> mysql< /groupId> < artifactId> mysql-connector-java< /artifactId> < version> 8.0.26< /version> < /dependency> < !--mybatis-plus--> < dependency> < groupId> com.baomidou< /groupId> < artifactId> mybatis-plus-boot-starter< /artifactId> < version> 3.4.3.4< /version> < /dependency> < !--mybatis-plus-generator 生成器--> < dependency> < groupId> com.baomidou< /groupId> < artifactId> mybatis-plus-generator< /artifactId> < version> 3.5.1< /version> < /dependency> < !--velocity--> < dependency> < groupId> org.apache.velocity< /groupId> < artifactId> velocity-engine-core< /artifactId> < version> 2.3< /version> < /dependency> < !--freemarker--> < dependency> < groupId> org.freemarker< /groupId> < artifactId> freemarker< /artifactId> < version> 2.3.31< /version> < /dependency> < !--beetl 模板--> < dependency> < groupId> com.ibeetl< /groupId> < artifactId> beetl< /artifactId> < version> 3.8.1.RELEASE< /version> < /dependency>

注:模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker,实际使用中只导入使用模板对应的依赖即可,不用全部导入。
4、编写一个mian方法,加上框架
public static void main(String[] args) { //1、配置数据源 FastAutoGenerator.create("url", "username", "password") //2、全局配置 .globalConfig(...) //3、包配置 .packageConfig(...) //4、策略配置 .strategyConfig(...) //5、模板引擎配置 .templateEngine(...) //6、执行 .execute(); }

5、进行数据源配置
public static void main(String[] args) { //1、配置数据源 FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp", "root", "123456") //2、全局配置 .globalConfig(...) //3、包配置 .packageConfig(...) //4、策略配置 .strategyConfig(...) //5、模板引擎配置 .templateEngine(...) //6、执行 .execute(); }

6、进行全局配置注:3.5.1+版本开始支持 lambda 表达式
//2、全局配置 .globalConfig(builder -> { builder.author("Jie") // 设置作者名 .outputDir(System.getProperty("user.dir") + "/src/main/java")//设置输出路径 .commentDate("yyyy-MM-dd hh:mm:ss")//注释日期 .dateType(DateType.ONLY_DATE)//定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime; ONLY_DATE=Date; .fileOverride()//覆盖之前的文件 .enableSwagger()//开启 swagger 模式 .disableOpenDir(); //禁止打开输出目录,默认打开 });

7、进行 包配置
//3、包配置 .packageConfig(builder -> { builder.parent("com") // 设置父包名 .moduleName("mp")//设置模块包名 .entity("entity")//pojo 实体类包名 .service("service") //Service 包名 .serviceImpl("serviceImpl") // ***ServiceImpl 包名 .mapper("mapper")//Mapper 包名 .xml("mapper")//Mapper XML 包名 .controller("controller") //Controller 包名 .other("utils") //自定义文件包名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper"))//配置 **Mapper.xml 路径信息:项目的 resources 目录的 Mapper 目录下 });

8、策略配置策略配置中需要对 Mapper,Service,Entity,Controller 类的生成策略进行单独的配置。
//4、策略配置 .strategyConfig(builder -> { builder.addInclude("user", "student") // 设置需要生成的数据表名 .addTablePrefix("t_", "c_") // 设置过滤表前缀//4.1、Mapper策略配置 .mapperBuilder() .superClass(BaseMapper.class)//设置父类 .formatMapperFileName("%sMapper")//格式化 mapper 文件名称 .enableMapperAnnotation()//开启 @Mapper 注解 .formatXmlFileName("%sXml"); //格式化 Xml 文件名称//4.2、service 策略配置 .serviceBuilder() .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl//4.3、实体类策略配置 .entityBuilder() .enableLombok() //开启 Lombok .disableSerialVersionUID()//不实现 Serializable 接口,不生产 SerialVersionUID .logicDeleteColumnName("deleted")//逻辑删除字段名 .naming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略:下划线转驼峰命 .columnNaming(NamingStrategy.underline_to_camel)//数据库表字段映射到实体的命名策略:下划线转驼峰命 .addTableFills( new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE) )//添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间 .enableTableFieldAnnotation()// 开启生成实体时生成字段注解//4.4、Controller策略配置 .controllerBuilder() .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController .enableRestStyle()//开启生成 @RestController 控制器})

9、模板引擎配置
//5、模板引擎 .templateEngine(new VelocityTemplateEngine())//默认 /* .templateEngine(new FreemarkerTemplateEngine()) .templateEngine(new BeetlTemplateEngine()) */

10、执行
//6、执行 .execute();

执行效果演示:
注:这里使用的是附2的交互式生成,两者源码几乎没有区别。
#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)

文章图片

#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)

文章图片

附1:快速生成样例代码
public static void main(String[] args) { //1、配置数据源 FastAutoGenerator.create("jdbc:mysql://localhost:3306/mp", "root", "123456") //2、全局配置 .globalConfig(builder -> { builder.author("Jie") // 设置作者名 .outputDir(System.getProperty("user.dir") + "/src/main/java")//设置输出路径:项目的 java 目录下 .commentDate("yyyy-MM-dd hh:mm:ss")//注释日期 .dateType(DateType.ONLY_DATE)//定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime; ONLY_DATE=Date; .fileOverride()//覆盖之前的文件 .enableSwagger()//开启 swagger 模式 .disableOpenDir(); //禁止打开输出目录,默认打开 }) //3、包配置 .packageConfig(builder -> { builder.parent("com") // 设置父包名 .moduleName("mp")//设置模块包名 .entity("entity")//pojo 实体类包名 .service("service") //Service 包名 .serviceImpl("serviceImpl") // ***ServiceImpl 包名 .mapper("mapper")//Mapper 包名 .xml("mapper")//Mapper XML 包名 .controller("controller") //Controller 包名 .other("utils") //自定义文件包名 .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper"))//配置 mapper.xml 路径信息:项目的 resources 目录下 }) //4、策略配置 .strategyConfig(builder -> { builder.addInclude("user", "student") // 设置需要生成的数据表名 .addTablePrefix("t_", "c_") // 设置过滤表前缀//4.1、Mapper策略配置 .mapperBuilder() .superClass(BaseMapper.class)//设置父类 .formatMapperFileName("%sMapper")//格式化 mapper 文件名称 .enableMapperAnnotation()//开启 @Mapper 注解 .formatXmlFileName("%sXml"); //格式化 Xml 文件名称//4.2、service 策略配置 .serviceBuilder() .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl//4.3、实体类策略配置 .entityBuilder() .enableLombok() //开启 Lombok .disableSerialVersionUID()//不实现 Serializable 接口,不生产 SerialVersionUID .logicDeleteColumnName("deleted")//逻辑删除字段名 .naming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略:下划线转驼峰命 .columnNaming(NamingStrategy.underline_to_camel)//数据库表字段映射到实体的命名策略:下划线转驼峰命 .addTableFills( new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE) )//添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间 .enableTableFieldAnnotation()// 开启生成实体时生成字段注解//4.4、Controller策略配置 .controllerBuilder() .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController .enableRestStyle()//开启生成 @RestController 控制器 }) //5、模板 .templateEngine(new VelocityTemplateEngine()) /* .templateEngine(new FreemarkerTemplateEngine()) .templateEngine(new BeetlTemplateEngine()) */ //6、执行 .execute(); }

附2:交互式生成样例代码
public static void main(String[] args) { Scanner scan = new Scanner(System.in); System.out.println("=====================数据库配置======================="); System.out.println("请输入 URL"); String url = scan.next(); System.out.println("请输入 username"); String username = scan.next(); System.out.println("请输入 password"); String password = scan.next(); FastAutoGenerator.create(url, username, password) // 全局配置 .globalConfig((scanner, builder) -> builder.author(scanner.apply("=====================全局配置=======================\\n请输入作者名称?")) .outputDir(System.getProperty("user.dir") + "/src/main/java") .commentDate("yyyy-MM-dd hh:mm:ss") .dateType(DateType.TIME_PACK) .enableSwagger() .fileOverride() .enableSwagger() .disableOpenDir() ) // 包配置 .packageConfig((scanner, builder) -> builder.parent(scanner.apply("=====================包配置=======================\\n请输入包名?")) .moduleName(scanner.apply("请输入父包模块名?")) .entity("entity") .service("service") .serviceImpl("serviceImpl") .mapper("mapper") .xml("mapper") .other("utils") .pathInfo(Collections.singletonMap(OutputFile.mapperXml, System.getProperty("user.dir")+"/src/main/resources/mapper")) ) // 策略配置 .strategyConfig((scanner, builder) -> { builder.addInclude(getTables(scanner.apply("=====================策略配置=======================\\n请输入表名,多个英文逗号分隔?所有输入 all"))) .serviceBuilder() .formatServiceFileName("%sService") .formatServiceImplFileName("%sServiceImpl") .entityBuilder()//实体类策略配置 .enableLombok()//开启 Lombok .disableSerialVersionUID() .logicDeleteColumnName("deleted")//逻辑删除字段 .naming(NamingStrategy.underline_to_camel) .columnNaming(NamingStrategy.underline_to_camel) .addTableFills(new Column("create_time", FieldFill.INSERT), new Column("modify_time", FieldFill.INSERT_UPDATE)) .enableTableFieldAnnotation()// 开启生成实体时生成字段注解 .controllerBuilder() .formatFileName("%sController") .enableRestStyle() .mapperBuilder() .superClass(BaseMapper.class) .formatMapperFileName("%sMapper") .enableMapperAnnotation()//@mapper .formatXmlFileName("%sMapper"); }) /* 模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker .templateEngine(new BeetlTemplateEngine()) .templateEngine(new FreemarkerTemplateEngine()) */ .execute(); }// 处理 all 情况 protected static List< String> getTables(String tables) { return "all".equals(tables) ? Collections.emptyList() : Arrays.asList(tables.split(",")); }


    推荐阅读