MyBatis-Plus——代码生成器(3.5.1+版本)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: MyBatis-Plus——代码生成器(3.5.1+版本)
notLikeTable(LikeTable) 模糊表排除(sql 过滤) likeTable 与 notLikeTable 只能配置一项
addInclude(String…) 增加表匹配(内存过滤) include 与 exclude 只能配置一项

MyBatis-Plus 官方文档:https://mp.baomidou.com/guide/generator-new.html

45d1533ceaf84195246844f73d831cf9.png

这是官网上的文档,从官方文档中给快速生成代码中,可以看出代码生成器的配置结构为:

    //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)

默认 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 项目be309998c9f419b2f1a96a4a897e7ff1.png

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方法,加上框架

publicstaticvoidmain(String[] args) {
//1、配置数据源FastAutoGenerator.create("url", "username", "password")
//2、全局配置        .globalConfig(...)
//3、包配置        .packageConfig(...)
//4、策略配置        .strategyConfig(...)
//5、模板引擎配置        .templateEngine(...)
//6、执行        .execute();
}

5、进行数据源配置

publicstaticvoidmain(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(
newColumn("create_time", FieldFill.INSERT),
newColumn("modify_time", FieldFill.INSERT_UPDATE)
            )   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间            .enableTableFieldAnnotation()       // 开启生成实体时生成字段注解//4.4、Controller策略配置            .controllerBuilder()
            .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController            .enableRestStyle()  //开启生成 @RestController 控制器})

9、模板引擎配置

//5、模板引擎    .templateEngine(newVelocityTemplateEngine())   //默认/*.templateEngine(new FreemarkerTemplateEngine()).templateEngine(new BeetlTemplateEngine())*/

10、执行

//6、执行    .execute();

执行效果演示:

注:这里使用的是附2的交互式生成,两者源码几乎没有区别。c3896d4632674138b25408e6732740af.gif00051c589ac826e7cd306bf26fc3cf45.png




附1:快速生成样例代码

publicclassGenerator {
publicstaticvoidmain(String[] args) {
//1、配置数据源FastAutoGenerator.create("jdbc:mysql://localhost:3306/yeb", "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("pojo")   //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(
newColumn("create_time", FieldFill.INSERT),
newColumn("modify_time", FieldFill.INSERT_UPDATE)
                            )   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间                            .enableTableFieldAnnotation()       // 开启生成实体时生成字段注解//4.4、Controller策略配置                            .controllerBuilder()
                            .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController                            .enableRestStyle();  //开启生成 @RestController 控制器                })
//5、模板                .templateEngine(newVelocityTemplateEngine())
/*.templateEngine(new FreemarkerTemplateEngine()).templateEngine(new BeetlTemplateEngine())*///6、执行                .execute();
    }
}

附2:交互式生成样例代码

publicstaticvoidmain(String[] args) {
Scannerscan=newScanner(System.in);
System.out.println("=====================数据库配置=======================");
System.out.println("请输入 URL");
Stringurl=scan.next();
System.out.println("请输入 username");
Stringusername=scan.next();
System.out.println("请输入 password");
Stringpassword=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(newColumn("create_time", FieldFill.INSERT), newColumn("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 情况protectedstaticList<String>getTables(Stringtables) {
return"all".equals(tables) ?Collections.emptyList() : Arrays.asList(tables.split(","));
}



相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4月前
|
XML Java 数据库连接
手写mybatis xml版本
手写mybatis xml版本
30 0
|
25天前
|
JavaScript Java 关系型数据库
SpringBoot + Mybatis + Vue的代码生成器
SpringBoot + Mybatis + Vue的代码生成器
32 2
|
8月前
|
算法 Java 数据库
mybatis-plus代码生成器生成
mybatis-plus代码生成器生成
76 0
|
4月前
|
API
mybatis-plus代码生成器(二)
mybatis-plus代码生成器(二)
38 0
|
5月前
|
关系型数据库 MySQL
mybatis-plus代码生成器
mybatis-plus代码生成器
33 0
|
5月前
|
Java 数据库连接 Maven
SpringBoot2.x+mybatis plus3.x集成Activit7版本
SpringBoot2.x+mybatis plus3.x集成Activit7版本
34 0
|
6月前
|
SQL 关系型数据库 MySQL
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
mybatis-plus代码生成器(+24篇MySql/MyBatis-Plus文章)
53 0
|
8月前
|
Java
MybatisPlus代码生成器:快速生成高质量代码
MybatisPlus代码生成器:快速生成高质量代码
48 0
|
8月前
|
Java 数据库连接 mybatis
mybatis与spring整合版本对应关系参考
mybatis与spring整合版本对应关系参考
1004 0