Mybatis Plus最新代码生成器AutoGenerator
AutoGenerator 是 MyBatis Plus推出的代码生成器,可以快速生成Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,比Mybatis Generator更强大,开发效率更高。
以往我们使用mybatis generator生成代码正常需要配置mybatis-generator-config.xml,代码配置比较繁琐复杂,比如:
<generatorConfiguration> <context id="myContext" targetRuntime="MyBatis3" defaultModelType="flat"> <!-- 注释 --> <commentGenerator> <!-- 是否不生成注释 --> <property name="suppressAllComments" value="true"/> </commentGenerator> <!-- jdbc连接 --> <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver" connectionURL="jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false" userId="codingmoretiny02" password="123456"> <!--高版本的 mysql-connector-java 需要设置 nullCatalogMeansCurrent=true--> <property name="nullCatalogMeansCurrent" value="true"/> </jdbcConnection> <!-- 类型转换 --> <javaTypeResolver> <property name="forceBigDecimals" value="true"/> </javaTypeResolver> <!-- 生成实体类地址 --> <javaModelGenerator targetPackage="com.codingmore.mbg.po" targetProject="src/main/java"> <!-- 是否针对string类型的字段在set方法中进行修剪,默认false --> <property name="trimStrings" value="true"/> </javaModelGenerator> <!-- 生成Mapper.xml文件 --> <sqlMapGenerator targetPackage="com.codingmore.mbg.mapper" targetProject="src/main/resources"> </sqlMapGenerator> <!-- 生成 XxxMapper.java 接口--> <javaClientGenerator targetPackage="com.codingmore.mbg.dao" targetProject="src/main/java" type="XMLMAPPER"> </javaClientGenerator> <table schema="" tableName="user" domainObjectName="User" enableCountByExample="false" enableDeleteByExample="false" enableSelectByExample="false" enableUpdateByExample="false" selectByExampleQueryId="false"> </table> </context> </generatorConfiguration>
使用AutoGenerator
1、初始化数据库
CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '用户名', `mobile` varchar(100) NULL DEFAULT NULL COMMENT '手机号', `create_by` varchar(64) NULL DEFAULT NULL COMMENT '创建人', `create_time` datetime(0) NULL DEFAULT NULL COMMENT '创建时间', PRIMARY KEY (`id`) USING BTREE, UNIQUE INDEX `username`(`username`) USING BTREE ) COMMENT = '用户';
2、在 pom.xml 文件中添加 AutoGenerator 的依赖。
<dependencies> <!-- mybatis-plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.4</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.2</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.31</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency> </dependencies>
3、核心代码
public class GeneratorConfig {
private final static String URL = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
private final static String USERNAME = "root";
private final static String PASSWORD = "123456";
//包名
private final static String PAGE = "com.zender.auto.code";
//生成路径
private final static String PROJECTPATH = "E://test";
private final static String MODULE = "/code";
private final static String AUTHOR = "zender";
public static DataSourceConfig initDataSourceConfig() {
return new DataSourceConfig
.Builder(URL, USERNAME, PASSWORD)
.dbQuery(new MySqlQuery())
//自定义数据库-java类型转换器,具体类需继承MySqlTypeConvert
//.typeConvert(new MySqlTypeConvert())
.keyWordsHandler(new MySqlKeyWordsHandler())
.build();
}
/**
* 全局配置
* @return
*/
public static GlobalConfig initGlobalConfig(){
// 全局配置
return new GlobalConfig.Builder()
//设置输出文件路径
.outputDir(PROJECTPATH + MODULE)
.author(AUTHOR)
//执行完 是否打开输出的目录,默认true
.disableOpenDir()
// 设置日期类型为Date(若不设置时间类型都会变成LocalDateTime部分连接池例如druid是无法识别的)
.dateType(DateType.ONLY_DATE)
.build();
}
/**
* 包配置
* @return
*/
public static PackageConfig initPackageConfig(){
// 包配置
return new PackageConfig.Builder()
//父包
.parent(PAGE)
//自定义实体包名
.entity("entity")
//自定义mapper包名
.mapper("mapper")
//自定义mapper.xml包名
.xml("mapper.xmls")
//自定义service包名
.service("service")
//自定义serviceImpl包名
.serviceImpl("service.impl")
//自定义controller包名
.controller("controller")
//自定义包名
.other("domain")
.build();
}
/**
* 模板配置
* @return
*/
public static TemplateConfig initTemplateConfig(){
// 配置模板
return new TemplateConfig.Builder()
.entity("templates/entity.java")
.controller("templates/controller.java")
.mapper("templates/mapper.java")
.service("templates/service.java")
.serviceImpl("templates/serviceImpl.java")
.xml("templates/mapper.xml")
.build();
}
/**
* 策略配置
* @return
*/
public static StrategyConfig initStrategyConfig(List<String> tableNames){
// 策略配置
return new StrategyConfig.Builder()
.addInclude(tableNames)
//定制实体
.entityBuilder()
.enableLombok()
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
//生成实体时生成数据库字段注解
.enableTableFieldAnnotation()
//定制controller
.controllerBuilder()
//是否rest模式
.enableRestStyle()
//定制service & Impl
.serviceBuilder()
//service命名规则
.convertServiceFileName(new ConverterFileName() {
@NotNull
@Override
public String convert(String entityName) {
return entityName + ConstVal.SERVICE;
}
})
//定制mapper
.mapperBuilder()
.enableBaseColumnList()
.enableBaseResultMap()
//TODO 需根据实际缓存调整
.cache(Cache.class)
.build();
}
/**
* 注入自定义配置-参数、生成类
* @return
*/
public static InjectionConfig initInjectionConfig(Map<String, Object> parameterMap){
//自定义生成类
HashMap<String, String> customFileMap = new HashMap<>(4);
//Vo实体
customFileMap.put(File.separator+"%sVO.java", "templates/vo.java.ftl");
//DTO实体
customFileMap.put(File.separator+"%sDTO.java", "templates/dto.java.ftl");
return new InjectionConfig.Builder()
.customMap(parameterMap)
.customFile(customFileMap)
.build();
}
}4、自定以模板解析器
public class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {
@Override
protected void outputCustomFile(Map<String, String> customFile, TableInfo tableInfo, Map<String, Object> objectMap) {
String entityName = tableInfo.getEntityName();
String otherPath = this.getPathInfo(OutputFile.other);
customFile.forEach((key, value) -> {
String fileName = String.format(otherPath + File.separator + entityName + "%s", key);
this.outputFile(new File(fileName), objectMap, value, true);
});
}
}5、启动类
public class MyGenerator {
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator(GeneratorConfig.initDataSourceConfig());
//自定义参数,全局适用
HashMap<String, Object> parameterMap = new HashMap<>(4);
parameterMap.put("workflow", true);
parameterMap.put("permission", true);
//需要生成的表名
List<String> tableLists = Arrays.asList("user");
//全局配置
mpg.global(GeneratorConfig.initGlobalConfig())
//包配置
.packageInfo(GeneratorConfig.initPackageConfig())
//模板配置
.template(GeneratorConfig.initTemplateConfig())
//策略配置
.strategy(GeneratorConfig.initStrategyConfig(tableLists))
//自定义配置
.injection(GeneratorConfig.initInjectionConfig(parameterMap));
//生成
mpg.execute(new EnhanceFreemarkerTemplateEngine());
}
}结构如下
运行结果
想了解MyBatis Plus代码生成配置可以参考官方配置:代码生成器配置新
版权声明
非特殊说明,本文由Zender原创或收集发布,欢迎转载。
ZENDER

发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。