使用mybatis-plus的代码生成记录
时间: 2023/5/29
- 📖 官网地址
使用的依赖
<dependencies>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
</dependencies>
代码生成器代码
DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder("jdbc:mysql://127.0.0.1:3307/pd_auth" ,
"root" , "liuziyan123")
// 数据库查询
.dbQuery(new MySqlQuery())
// 数据库 schema(部分数据库适用)
.schema("pd_auth")
// 类型转换器(默认)
.typeConvert(new MySqlTypeConvert())
// 数据库关键字处理器
.keyWordsHandler(new MySqlKeyWordsHandler())
.build();
GlobalConfig globalConfig = new GlobalConfig.Builder()
.outputDir(System.getProperty("user.dir") + "/src/main/java")
.author("蜻蜓队长")
// 时间策略 使用jdk8的新时间类
.dateType(DateType.TIME_PACK)
// 注释日期
.commentDate("yyyy-MM-dd")
.build();
PackageConfig packageConfig = new PackageConfig.Builder()
// 父包名
.parent("com.rjxy")
.entity("po")
.service("service")
.serviceImpl("service.impl")
.mapper("mapper")
// .xml("mapper.xml")
.controller("controller")
// 路径配置信息
.pathInfo(Collections.singletonMap(OutputFile.xml, System.getProperty("user.dir") + "/src/main/resources/mappers"))
.build();
StrategyConfig strategyConfig = new StrategyConfig.Builder()
// 开启大写命名
.enableCapitalMode()
// 开启跳过试图
.enableSkipView()
// 禁用sql过滤
.disableSqlFilter()
.addInclude("pd_auth_menu" , "pd_auth_resource" , "pd_auth_role" ,
"pd_auth_role_authority" , "pd_auth_role_org" , "pd_auth_user" ,
"pd_auth_user_role" , "pd_common_login_log" ,
"pd_common_opt_log" , "pd_core_org" , "pd_core_station")
// 实体类配置
.entityBuilder()
// 覆盖已生成文件
.enableFileOverride()
// 开启lombok模型
.enableLombok()
.enableRemoveIsPrefix()
// 开启生成实体时生成字段注解
.enableTableFieldAnnotation()
.naming(NamingStrategy.underline_to_camel)
.columnNaming(NamingStrategy.underline_to_camel)
// .superClass("com.rjxy.global.BaseEntity")
// .addSuperEntityColumns("create_time" , "update_time")
.idType(IdType.ASSIGN_ID)
// 控制器配置
.controllerBuilder()
.enableFileOverride()
.enableHyphenStyle()
.enableRestStyle()
.formatFileName("%sController")
// 服务层配置
.serviceBuilder()
.enableFileOverride()
.formatServiceFileName("%sService")
.formatServiceImplFileName("%sServiceImpl")
// dao层配置
.mapperBuilder()
.enableFileOverride()
.superClass(BaseMapper.class)
.mapperAnnotation(Mapper.class)
.enableBaseResultMap()
.enableBaseColumnList()
.formatMapperFileName("%sDao")
.formatXmlFileName("%sXml")
.build();
TemplateConfig templateConfig = new TemplateConfig.Builder()
.entity("/template/entity.java.vm")
.mapper("/template/mapper.java.vm")
.service("/template/service.java.vm")
.serviceImpl("/template/serviceImpl.java.vm")
.controller("/template/controller.java.vm")
.build();
AutoGenerator generator = new AutoGenerator(dataSourceConfig);
generator.global(globalConfig)
.packageInfo(packageConfig)
.strategy(strategyConfig)
.template(templateConfig)
.execute();
代码模板
controller.java.vm
package ${package.Controller};
import org.springframework.web.bind.annotation.RequestMapping;
#if(${restControllerStyle})
import org.springframework.web.bind.annotation.RestController;
#else
import org.springframework.stereotype.Controller;
#end
#if(${superControllerClassPackage})
import ${superControllerClassPackage};
#end
import ${package.Service}.${table.serviceName};
import lombok.extern.slf4j.Slf4j;
import javax.annotation.Resource;
/**
* <p>
* $!{table.comment} 前端控制器
* </p>
*
* @author ${author}
* @date ${date}
*/
@Slf4j
#if(${restControllerStyle})
@RestController
#else
@Controller
#end
@RequestMapping("#if(${package.ModuleName})/${package.ModuleName}#end/#if(${controllerMappingHyphenStyle})${controllerMappingHyphen}#else${table.entityPath}#end")
#if(${kotlin})
class ${table.controllerName}#if(${superControllerClass}) : ${superControllerClass}()#end
#else
#if(${superControllerClass})
public class ${table.controllerName} extends ${superControllerClass} {
#else
public class ${table.controllerName} {
#end
@Resource
private ${table.serviceName} ${entity}ServiceImpl;
}
#end
entity.java.vm
package ${package.Entity};
#foreach($pkg in ${table.importPackages})
import ${pkg};
#end
#if(${springdoc})
import io.swagger.v3.oas.annotations.media.Schema;
#elseif(${swagger})
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
#end
#if(${entityLombokModel})
import lombok.Data;
#if(${chainModel})
import lombok.experimental.Accessors;
#end
#end
/**
* <p>
* $!{table.comment}
* </p>
*
* @author ${author}
* @since ${date}
*/
#if(${entityLombokModel})
@Data
#if(${chainModel})
@Accessors(chain = true)
#end
#end
#if(${table.convert})
@TableName("${schemaName}${table.name}")
#end
#if(${springdoc})
@Schema(name = "${entity}" , description = "$!{table.comment}")
#elseif(${swagger})
@ApiModel(value = "${entity}对象" , description = "$!{table.comment}")
#end
#if(${superEntityClass})
public class ${entity} extends ${superEntityClass}#if(${activeRecord})<${entity}>#end {
#elseif(${activeRecord})
public class ${entity} extends Model<${entity}> {
#elseif(${entitySerialVersionUID})
public class ${entity} implements Serializable{
#else
public class ${entity} {
#end
#if(${entitySerialVersionUID})
private static final long serialVersionUID=1L;
#end
## ---------- BEGIN 字段循环遍历 ----------
#foreach($field in ${table.fields})
#if(${field.keyFlag})
#set($keyPropertyName=${field.propertyName})
#end
#if("$!field.comment" != "")
#if(${springdoc})
@Schema(description = "${field.comment}")
#elseif(${swagger})
@ApiModelProperty("${field.comment}")
#else
/**
* ${field.comment}
*/
#end
#end
#if(${field.keyFlag})
## 主键
#if(${field.keyIdentityFlag})
@TableId(value = "${field.annotationColumnName}" , type = IdType.AUTO)
#elseif(!$null.isNull(${idType}) && "$!idType" != "")
@TableId(value = "${field.annotationColumnName}" , type = IdType.${idType})
#elseif(${field.convert})
@TableId("${field.annotationColumnName}")
#end
## 普通字段
#elseif(${field.fill})
## ----- 存在字段填充设置 -----
#if(${field.convert})
@TableField(value = "${field.annotationColumnName}" , fill = FieldFill.${field.fill})
#else
@TableField(fill = FieldFill.${field.fill})
#end
#elseif(${field.convert})
@TableField("${field.annotationColumnName}")
#end
## 乐观锁注解
#if(${field.versionField})
@Version
#end
## 逻辑删除注解
#if(${field.logicDeleteField})
@TableLogic
#end
private ${field.propertyType} ${field.propertyName};
#end
## ---------- END 字段循环遍历 ----------
#if(!${entityLombokModel})
#foreach($field in ${table.fields})
#if(${field.propertyType.equals("boolean")})
#set($getprefix="is")
#else
#set($getprefix="get")
#end
public ${field.propertyType} ${getprefix}${field.capitalName}(){
return ${field.propertyName};
}
#if(${chainModel})
public ${entity} set${field.capitalName}(${field.propertyType} ${field.propertyName}){
#else
public void set${field.capitalName}(${field.propertyType} ${field.propertyName}) {
#end
this.${field.propertyName} = ${field.propertyName};
#if(${chainModel})
return this;
#end
}
#end
## --foreach end---
#end
## --end of #if(!${entityLombokModel})--
#if(${entityColumnConstant})
#foreach($field in ${table.fields})
public static final String ${field.name.toUpperCase()} ="${field.name}";
#end
#end
#if(${activeRecord})
@Override
public Serializable pkVal(){
#if(${keyPropertyName})
return this.${keyPropertyName};
#else
return null;
#end
}
#end
#if(!${entityLombokModel})
@Override
public String toString() {
return "${entity}{" +
#foreach($field in ${table.fields})
#if($!{foreach.index}==0)
"${field.propertyName} = " + ${field.propertyName} +
#else
", ${field.propertyName} = " + ${field.propertyName} +
#end
#end
"}";
}
#end
}
mapper.java.vm
package ${package.Mapper};
import ${package.Entity}.${entity};
import ${superMapperClassPackage};
#if(${mapperAnnotationClass})
import ${mapperAnnotationClass.name};
#end
/**
* <p>
* $!{table.comment} Mapper 接口
* </p>
*
* @author ${author}
* @since ${date}
*/
#if(${mapperAnnotationClass})
@${mapperAnnotationClass.simpleName}
#end
#if(${kotlin})
interface ${table.mapperName} : ${superMapperClass}<${entity}>
#else
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}
#end
service.java.vm
package ${package.Service};
import ${package.Entity}.${entity};
import ${superServiceClassPackage};
/**
* <p>
* $!{table.comment} 服务类
* </p>
*
* @author ${author}
* @since ${date}
*/
#if(${kotlin})
interface ${table.serviceName} : ${superServiceClass}<${entity}>
#else
public interface ${table.serviceName} extends ${superServiceClass}<${entity}> {
}
#end
serviceImpl.java.vm
package ${package.ServiceImpl};
import ${package.Entity}.${entity};
import ${package.Mapper}.${table.mapperName};
import ${package.Service}.${table.serviceName};
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
/**
* <p>
* $!{table.comment} 服务实现类
* </p>
*
* @author ${author}
* @since ${date}
*/
@Service
#if(${kotlin})
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>(), ${table.serviceName} {
}
#else
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}>implements ${table.serviceName} {
}
#end