mybatis-plus-generator
Table of Contents
目的
使用Mybatis-generator
生成controller
,service
,serviceImpl
,entity
.etc,相当于备忘录
依赖引入
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.4.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version>
</dependency>
模板代码
自行配置url
,port
,name
,pwd
,db_name
,service_name
,parent_pack
.etc属性,所有代码已解释
package com.los.codegen.gen;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import java.util.Arrays;
/**
* @author paul 2024/1/31
*/
public class coreGen {
private static final String SERVICE_NAME = "${service_name}";
//dataSource config
private static final String DATA_SOURCE_USER_NAME = "${name}l";
private static final String DATA_SOURCE_PASSWORD = "${pwd}";
//package config
private static final String PARENT_PACK_NAME = "${parent_apck}";
private static final String XML_PACK_NAME = "mapper";
private static final String SERVICE_IMPL_PACK_NAME = "service.impl";
private static final String ENTITY_PACK_NAME = "entity";
private static final String DATA_SOURCE_URL = "jdbc:mysql://${url}:${port}/l${db_name}";
private static final String[] TABLE_NAMES = new String[]{
"t_isv_info",
"t_mch_app",
"t_mch_division_receiver",
"..."
//自行配置表名
};
public static void main(String[] args) {
/* 配置数据源 **/
FastAutoGenerator.create(new DataSourceConfig.Builder(DATA_SOURCE_URL, DATA_SOURCE_USER_NAME, DATA_SOURCE_PASSWORD))
.globalConfig(builder -> {
/* 自定义作者 **/
builder.author("paul")
/* 开启springdoc,配置springdoc输出,原因是knife4j底层基于springdoc**/
.enableSpringdoc()
/* 开启swagger,不能同时与springdoc开启,swagger优先级低于springdoc**/
/*.enableSwagger() **/
/* 关闭路径打开,默认开启,效果是本地打开文件夹 **/
.disableOpenDir()
/* 指定输出目录 **/
.outputDir("F:\\los\\los-codegen\\src\\main\\java");
})
/* 包路径配置 ,也就是主目录下各个模块生成的文件名 **/
.packageConfig(builder -> {
/* 父包名 **/
builder.parent(PARENT_PACK_NAME)
/* xml 文件路径 **/
.xml(XML_PACK_NAME)
/* 模块名,实际路径是PARENT_PACK_NAME+SERVICE_NAME **/
.moduleName(SERVICE_NAME)
/* serviceImpl 文件路径 **/
.serviceImpl(SERVICE_IMPL_PACK_NAME)
/* entity 文件路径 **/
.entity(ENTITY_PACK_NAME);
})
.strategyConfig(builder -> {
/* 设置需要生成的表名 **/
builder.addInclude(TABLE_NAMES)
/* 设置过滤表前缀 **/
.addTablePrefix("t_", "c_") //
/* entity builder **/
.entityBuilder()
/* 数据库表映射到实体的命名策略-->下划线转驼峰 **/
.naming(NamingStrategy.underline_to_camel)
/* 数据库表字段映射到实体的命名策略-->下划线转驼峰 **/
.columnNaming(NamingStrategy.underline_to_camel)
/* 覆盖已有文件 **/
.enableFileOverride()
/* 开启lombok **/
.enableLombok()
/* tableField 填充 **/
.addTableFills(Arrays.asList(
/* 自定义字段填充策略 **/
new Column("created_at", FieldFill.INSERT),
new Column("updated_at", FieldFill.UPDATE)
))
/* controller builder **/
.controllerBuilder()
/* 开启restful **/
.enableRestStyle()
/* 开启驼峰转连字符 **/
.enableHyphenStyle()
/* service builder **/
.serviceBuilder()
/* 覆盖已有文件 **/
.enableFileOverride()
/* 自定义service命名策略 **/
.formatServiceFileName("%sService")
/* 自定义serviceImpl命名策略 **/
.formatServiceImplFileName("%sServiceImpl")
/* mapper builder **/
.mapperBuilder()
/* 启用基础列列表,意味着在生成SQL查询时包括所有列的基础信息 **/
.enableBaseColumnList()
/* 启用基础结果映射,即自动为查询结果创建默认的映射关系,将数据库表的字段映射到对象的属性上 **/
.enableBaseResultMap()
.build();
})
/* 使用Freemarker引擎模板,默认的是Velocity引擎模板 **/
.templateEngine(new FreemarkerTemplateEngine())
/* 执行 **/
.execute();
}
}
注意
springboot3.0
以上版本,使用knife4j
时开启springdoc
,若出现无法生成代码的bug,可能的情况是版本错误和freemarker
模板有误.- 直接从
maven
中复制的模板,会出现空格问题,freemarker
的语法是保留空格的,所以需要源文件删除空格 mybatis.generator
不同版本的freemarker
模板之间存在差异,比如对spring.doc
的支持,请使用相同版本的模板- 模板路径为
resource/template
- 推荐文件输出路径与实际开发项目独立,防止误操作导致损失