MyBatisPlus(四、代码生成器)

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:  AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速根据数据表自动生成实体类、Mapper、Service、ServiceImpl、Controller等各个模块的代码,极大的提升了开发效率。

一、旧版本

注意

适用版本:mybatis-plus-generator 3.5.1 以下版本

  AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速根据数据表自动生成实体类、Mapper、Service、ServiceImpl、Controller等各个模块的代码,极大的提升了开发效率。

1、添加模板引擎依赖

  添加 模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。

Velocity(默认):

<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>最新版本</version></dependency>

Freemarker:

<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>最新版本</version></dependency>

Beetl:

<dependency><groupId>com.ibeetl</groupId><artifactId>beetl</artifactId><version>最新版本</version></dependency>

我们选用默认的

2、添加generator依赖

在 pom.xml 导入 MyBatis Plus Generator 的依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.3.1.tmp</version></dependency><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity</artifactId><version>1.7</version></dependency>

3、编写生成器代码

1、配置 GlobalConfig

这里是生成的位置作者

GlobalConfigglobalConfig=newGlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir") +"/src/main/java");
globalConfig.setAuthor("jobob");
globalConfig.setOpen(false);
2、DataSourceConfig

这里是数据库的连接信息

DataSourceConfigdataSourceConfig=newDataSourceConfig();
dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");
dataSourceConfig.setDriverName("com.mysql.jdbc.Driver");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("password");

详细代码如下:

packagecom.example.mybatisplus;
importcom.baomidou.mybatisplus.annotation.DbType;
importcom.baomidou.mybatisplus.generator.AutoGenerator;
importcom.baomidou.mybatisplus.generator.config.DataSourceConfig;
importcom.baomidou.mybatisplus.generator.config.GlobalConfig;
importcom.baomidou.mybatisplus.generator.config.PackageConfig;
importcom.baomidou.mybatisplus.generator.config.StrategyConfig;
importcom.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
publicclassMain {
publicstaticvoidmain(String[] args) {
//1、创建generator对象AutoGeneratorautoGenerator=newAutoGenerator();
//数据源DataSourceConfigdataSourceConfig=newDataSourceConfig();
dataSourceConfig.setDbType(DbType.MYSQL);
dataSourceConfig.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8");
dataSourceConfig.setUsername("root");
dataSourceConfig.setPassword("root");
dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
autoGenerator.setDataSource(dataSourceConfig);      //设置数据源//2、全局配置GlobalConfigglobalConfig=newGlobalConfig();
globalConfig.setOutputDir(System.getProperty("user.dir")+"/src/main/java");
globalConfig.setOpen(false);        //是否打开输出目录globalConfig.setAuthor("xmp");      //作者globalConfig.setServiceName("%sService");           //设置生成的service接口的名字不带IautoGenerator.setGlobalConfig(globalConfig);        //设置全局配置//3、包信息PackageConfigpackageConfig=newPackageConfig();  //包配置packageConfig.setParent("com.example.mybatisplus");     //设置父包名packageConfig.setModuleName("generator");       //  设置子包名packageConfig.setController("controller");      //设置控制器包名packageConfig.setService("service");
packageConfig.setServiceImpl("service.impl");
packageConfig.setMapper("mapper");
packageConfig.setEntity("entity");
autoGenerator.setPackageInfo(packageConfig);        //设置包配置//4、配置策略StrategyConfigstrategyConfig=newStrategyConfig();       //策略配置strategyConfig.setEntityLombokModel(true);      //是否使用lombokstrategyConfig.setNaming(NamingStrategy.underline_to_camel);        //数据库表映射到实体的命名策略strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);  //数据库表字段映射到实体的命名策略autoGenerator.setStrategy(strategyConfig);      //设置策略配置autoGenerator.execute();        //执行生成    }
}

4、效果

用代码生成器生成的效果目录展示图:

image-20220814181717255.png

二、新版本

1、导入依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>最新版本</version></dependency>

注意

当前包未传递依赖 MP 包、mysql等,需要自己引入!

2、快速生成

FastAutoGenerator.create("url", "username", "password")
    .globalConfig(builder-> {
builder.author("baomidou") // 设置作者            .enableSwagger() // 开启 swagger 模式            .fileOverride() // 覆盖已生成文件            .outputDir("D://"); // 指定输出目录    })
    .packageConfig(builder-> {
builder.parent("com.baomidou.mybatisplus.samples.generator") // 设置父包名            .moduleName("system") // 设置父包模块名            .pathInfo(Collections.singletonMap(OutputFile.xml, "D://")); // 设置mapperXml生成路径    })
    .strategyConfig(builder-> {
builder.addInclude("t_simple") // 设置需要生成的表名            .addTablePrefix("t_", "c_"); // 设置过滤表前缀    })
    .templateEngine(newFreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板    .execute();


3、交互式生成

FastAutoGenerator.create(DATA_SOURCE_CONFIG)
// 全局配置    .globalConfig((scanner, builder) ->builder.author(scanner.apply("请输入作者名称?")).fileOverride())
// 包配置    .packageConfig((scanner, builder) ->builder.parent(scanner.apply("请输入包名?")))
// 策略配置    .strategyConfig((scanner, builder) ->builder.addInclude(getTables(scanner.apply("请输入表名,多个英文逗号分隔?所有输入 all")))
                        .controllerBuilder().enableRestStyle().enableHyphenStyle()
                        .entityBuilder().enableLombok().addTableFills(
newColumn("create_time", FieldFill.INSERT)
                        ).build())
/*模板引擎配置,默认 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(","));
}

4、配置

1、DataSourceConfig

基础配置

属性 说明 示例
url jdbc 路径 jdbc:mysql://127.0.0.1:3306/mybatis-plus
username 数据库账号 root
password 数据库密码 123456
newDataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .build();

可选配置

方法 说明 示例
dbQuery(IDbQuery) 数据库查询 new MySqlQuery()
schema(String) 数据库 schema(部分数据库适用) mybatis-plus
typeConvert(ITypeConvert) 数据库类型转换器 new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler) 数据库关键字处理器 new MySqlKeyWordsHandler()
newDataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
    .dbQuery(newMySqlQuery())
    .schema("mybatis-plus")
    .typeConvert(newMySqlTypeConvert())
    .keyWordsHandler(newMySqlKeyWordsHandler())
    .build();
2、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 默认值: DateType.TIME_PACK
commentDate(String) 注释日期 默认值: yyyy-MM-dd
newGlobalConfig.Builder()
    .fileOverride()
    .outputDir("/opt/baomidou")
    .author("baomidou")
    .enableKotlin()
    .enableSwagger()
    .dateType(DateType.TIME_PACK)
    .commentDate("yyyy-MM-dd")
    .build();
3、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
xml(String) Mapper XML 包名 默认值:mapper.xml
controller(String) Controller 包名 默认值:controller
other(String) 自定义文件包名 输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>) 路径配置信息 Collections.singletonMap(OutputFile.mapperXml, "D://")
newPackageConfig.Builder()
    .parent("com.baomidou.mybatisplus.samples.generator")
    .moduleName("sys")
    .entity("po")
    .service("service")
    .serviceImpl("service.impl")
    .mapper("mapper")
    .xml("mapper.xml")
    .controller("controller")
    .other("other")
    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://"))
    .build();
4、TemplateConfig
方法 说明 示例
disable 禁用所有模板
disable(TemplateType...) 禁用模板 TemplateType.ENTITY
entity(String) 设置实体模板路径(JAVA) /templates/entity.java
entityKt(String) 设置实体模板路径(kotlin) /templates/entity.java
service(String) 设置 service 模板路径 /templates/service.java
serviceImpl(String) 设置 serviceImpl 模板路径 /templates/serviceImpl.java
mapper(String) 设置 mapper 模板路径 /templates/mapper.java
mapperXml(String) 设置 mapperXml 模板路径 /templates/mapper.xml
controller(String) 设置 controller 模板路径 /templates/controller.java
newTemplateConfig.Builder()
    .disable(TemplateType.ENTITY)
    .entity("/templates/entity.java")
    .service("/templates/service.java")
    .serviceImpl("/templates/serviceImpl.java")
    .mapper("/templates/mapper.java")
    .mapperXml("/templates/mapper.xml")
    .controller("/templates/controller.java")
    .build();
5、InjectionConfig
方法 说明 示例
beforeOutputFile(BiConsumer<TableInfo, Map<String, Object>>) 输出文件之前消费者
customMap(Map<String, Object>) 自定义配置 Map 对象 Collections.singletonMap("test", "baomidou")
customFile(Map<String, String>) 自定义配置模板文件 Collections.singletonMap("test.txt", "/templates/test.vm")
newInjectionConfig.Builder()
    .beforeOutputFile((tableInfo, objectMap) -> {
System.out.println("tableInfo: "+tableInfo.getEntityName() +" objectMap: "+objectMap.size());
    })
    .customMap(Collections.singletonMap("test", "baomidou"))
    .customFile(Collections.singletonMap("test.txt", "/templates/test.vm"))
    .build();

6、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 策略配置

其他具体详细配置参考:https://baomidou.com/pages/981406/#service-%E7%AD%96%E7%95%A5%E9%85%8D%E7%BD%AE

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
Java 测试技术 数据库连接
【MyBatisPlus】MyBatisPlus 整合开发
【1月更文挑战第19天】【MyBatisPlus】MyBatisPlus 整合开发
|
3月前
|
SQL Java 数据库连接
Mybatis和MybatisPlus:数据库操作工具的对比
Mybatis和MybatisPlus:数据库操作工具的对比
151 0
|
3月前
|
Java 关系型数据库 数据库连接
【MyBatisPlus 】MyBatisPlus CRUD 工程使用
【1月更文挑战第19天】【MyBatisPlus 】MyBatisPlus CRUD 工程使用
|
3月前
如何使用MybatisPlus的代码生成器功能?
如何使用MybatisPlus的代码生成器功能?
|
3月前
|
Java 数据库连接 数据库
CodeGenerator——SpringBoot整合MyBatisPlus代码生成器
CodeGenerator——SpringBoot整合MyBatisPlus代码生成器
57 0
|
3月前
|
SQL Java 关系型数据库
MyBatisPlus之基本CRUD、常用注解
MyBatisPlus之基本CRUD、常用注解
|
4月前
|
Java 数据库 Maven
MyBatisPlus-代码生成器原理及实现
MyBatisPlus-代码生成器原理及实现
46 0
|
8月前
|
SQL XML Oracle
mybatis和mybatisPLUS
mybatis和mybatisPLUS
74 0
|
8月前
|
Java
MybatisPlus代码生成器:快速生成高质量代码
MybatisPlus代码生成器:快速生成高质量代码
48 0
|
9月前
|
XML Java 关系型数据库
MyBatisPlus代码生成器
MyBatisPlus代码生成器
71 0