
MyBatis-Plus在3.5.1版本之后,
改变了代码生成器的用法,
由于对历史版本的不兼容,
这次重新梳理一份新的用法。
3.5.1版本之前的代码生成器请参考:SpringBoot集成MyBatis-Plus代码生成器SpringBoot集成MyBatis-Plus代码生成器(Dao)
完整的pom.xml如下:
3.快速生成代码4.0.0 mybatis-plus-code-generater-v3.5.1 com.yuwen.spring database0.0.1-SNAPSHOT MyBatis Plus代码生成器使用Demo,3.5.1版本之后的生成方式 2.3.1.RELEASE org.springframework.boot spring-boot-dependencies${spring-boot.version} pom import org.springframework spring-webmysql mysql-connector-javaruntime com.baomidou mybatis-plus-generator3.5.1 org.freemarker freemarkercom.baomidou mybatis-plus-extension3.4.3 org.springframework.boot spring-boot-starterorg.springframework.boot spring-boot-starter-loggingorg.springframework.boot spring-boot-starter-log4j2
完整的CodeGenerator如下:
package com.yuwen.spring.uitl.generate;
import java.util.Collections;
import com.baomidou.mybatisplus.annotation.IdType;
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.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
public class CodeGenerator {
// 数据库连接配置
private static final String JDBC_URL = "jdbc:mysql://11.12.13.14:3306/demodb?useUnicode=true&useSSL=false&characterEncoding=utf8";
private static final String JDBC_USER_NAME = "demo";
private static final String JDBC_PASSOWRD = "demo123456";
// 包名和模块名
private static final String PACKAGE_NAME = "com.example";
private static final String MODULE_NAME = "demo";
// 表名,多个表使用英文逗号分割
private static final String[] TBL_NAMES = { "tbl_user", "tbl_role" };
// 表名的前缀,从表生成代码时会去掉前缀
private static final String TABLE_PREFIX = "tbl_";
// 生成代码入口main方法
public static void main(String[] args) {
// 1.数据库配置
DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
JDBC_PASSOWRD).dbQuery(new MySqlQuery()).typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler());
// 1.1.快速生成器
FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
// 2.全局配置
// 覆盖已生成文件
// 不打开生成文件目录
// 指定输出目录,注意使用反斜杠
// 设置注释的作者
// 设置注释的日期格式
// 使用java8新的时间类型
fastAutoGenerator.globalConfig(globalConfigBuilder -> globalConfigBuilder.fileOverride().disableOpenDir()
.outputDir("src\main\java").author("yuwen").commentDate("yyyy-MM-dd").dateType(DateType.TIME_PACK));
// 3.包配置
// 设置父包名
// 设置父包模块名
// 设置MVC下各个模块的包名
// 设置XML资源文件的目录
fastAutoGenerator.packageConfig(packageConfigBuilder -> packageConfigBuilder.parent(PACKAGE_NAME)
.moduleName(MODULE_NAME).entity("entity").mapper("dao").service("service").serviceImpl("service.impl")
.controller("controller").other("other")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "src\main\resources\mapper")));
// 4.模板配置
// 使用Freemarker引擎模板,默认的是Velocity引擎模板
AbstractTemplateEngine templateEngine = new FreemarkerTemplateEngine();
fastAutoGenerator.templateEngine(templateEngine);
// 5.注入配置 TODO
// 6.策略配置
// 设置需要生成的表名
// 设置过滤表前缀
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.enableCapitalMode()
.enableSkipView().disableSqlFilter().addInclude(TBL_NAMES).addTablePrefix(TABLE_PREFIX));
// 6.1.Entity策略配置
// 生成实体时生成字段的注解,包括@TableId注解等
// 数据库表和字段映射到实体的命名策略,为下划线转驼峰
// 全局主键类型为None
// 实体名称格式化为XXXEntity
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
.enableTableFieldAnnotation().naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel).idType(IdType.NONE).formatFileName("%sEntity"));
// 6.2.Controller策略配置
// 开启生成@RestController控制器
fastAutoGenerator
.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder().enableRestStyle());
// 6.3.Service策略配置
// 格式化service接口和实现类的文件名称,去掉默认的ServiceName前面的I
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
.formatServiceFileName("%sService").formatServiceImplFileName("%sServiceImpl"));
// 6.4.Mapper策略配置
// 格式化 mapper文件名,格式化xml实现类文件名称
fastAutoGenerator.strategyConfig(strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
.formatMapperFileName("%sDao").formatXmlFileName("%sDao"));
// 7.生成代码
fastAutoGenerator.execute();
}
}
4.生成的代码
通过连接MySQL数据库,
生成对应的代码框架如下:
new DataSourceConfig.
Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456").build();
5.1.2.可选配置
new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3306/mybatis-plus","root","123456")
.dbQuery(new MySqlQuery())
.schema("mybatis-plus")
.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler())
.build();
5.2.全局配置(GlobalConfig)
new GlobalConfig.Builder()
.fileOverride()
.outputDir("/opt/baomidou")
.author("baomidou")
.enableKotlin()
.enableSwagger()
.dateType(DateType.TIME_PACK)
.commentDate("yyyy-MM-dd")
.build();
5.3.包配置(PackageConfig)
new PackageConfig.Builder()
.parent("com.baomidou.mybatisplus.samples.generator")
.moduleName("sys")
.entity("po")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
.mapperXml("mapper.xml")
.controller("controller")
.other("other")
.pathInfo(Collections.singletonMap(OutputFile.mapperXml, "D://")
.build();
5.4.模板配置(TemplateConfig)
new TemplateConfig.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.5.注入配置(InjectionConfig)
new InjectionConfig.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();
5.6.策略配置(StrategyConfig)
new StrategyConfig.Builder()
.enableCapitalMode()
.enableSkipView()
.disableSqlFilter()
.likeTable(new LikeTable("USER"))
.addInclude("t_simple")
.addTablePrefix("t_", "c_")
.addFieldSuffix("_flag")
.build();
5.6.1.Entity策略配置
new StrategyConfig.Builder()
.entityBuilder()
.superClass(baseEntity.class)
.disableSerialVersionUID()
.enableChainModel()
.enableLombok()
.enableRemoveIsPrefix()
.enableTableFieldAnnotation()
.enableActiveRecord()
.versionColumnName("version")
.versionPropertyName("version")
.logicDeleteColumnName("deleted")
.logicDeletePropertyName("deleteFlag")
.naming(NamingStrategy.no_change)
.columnNaming(NamingStrategy.underline_to_camel)
.addSuperEntityColumns("id", "created_by", "created_time", "updated_by", "updated_time")
.addIgnoreColumns("age")
.addTableFills(new Column("create_time", FieldFill.INSERT))
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
.idType(IdType.AUTO)
.formatFileName("%sEntity")
.build();
5.6.2.Controller策略配置
new StrategyConfig.Builder()
.controllerBuilder()
.superClass(baseController.class)
.enableHyphenStyle()
.enableRestStyle()
.formatFileName("%sAction")
.build();
5.6.3.Service策略配置
new StrategyConfig.Builder()
.serviceBuilder()
.superServiceClass(baseService.class)
.superServiceImplClass(baseServiceImpl.class)
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImp")
.build();
5.6.4.Mapper策略配置
new StrategyConfig.Builder()
.mapperBuilder()
.superClass(baseMapper.class)
.enableMapperAnnotation()
.enablebaseResultMap()
.enablebaseColumnList()
.cache(MyMapperCache.class)
.formatMapperFileName("%sDao")
.formatXmlFileName("%sXml")
.build();
6.参考文章
MyBatis-Plus 代码生成器(3.5.1+版本)
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)