一、旧版本
注意
适用版本: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、效果
用代码生成器生成的效果目录展示图:
二、新版本
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