枕上从妨一夜睡,灯前读尽十年诗。这篇文章主要讲述#yyds干货盘点# MyBatis-Plus——代码生成器(3.5.1+版本)相关的知识,希望能为你提供帮助。
MyBatis-Plus 官方文档:https://mp.baomidou.com/guide/generator-new.html
文章图片
这是官网上的文档,从官方文档中给快速生成代码中,可以看出代码生成器的配置结构为:
//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() |
方法 | 说明 | 示例 |
---|---|---|
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 |
方法 | 说明 | 示例 |
---|---|---|
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://" ) |
方法 | 说明 | 示例 |
---|---|---|
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 策略配置 |
【#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 | 成绩 |
文章图片
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的交互式生成,两者源码几乎没有区别。
文章图片
文章图片
附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(","));
}
推荐阅读
- rpm 命令 – RPM软件包管理器
- WordPress主题中的Bootstrap无法在浏览器中渲染
- bootstrap字形在WordPress主题中不起作用
- 缩放时的bootstrap网格对齐问题
- 使用the_post_thumbnail()图像引导4张卡片可以通过wordpress拉伸以适合自己()
- Avada在菜单项之间添加空格
- 输入凭据后空白wp-login.php页面
- 桌面和移动设备上的背景图片定位
- 更新帖子时自动重定向到wp-admin/post