MyBatis-Plus代码一键生成
开始:
添加依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
配置方法:只需要修改以下的常量即可
/**
* @Description 快速生产模板代码
* @Author WangKun
* @Date 2024/9/14 10:28
* @Version
*/
@Slf4j
public class CodedGeneration {
/**
* @Description 代码生成
* @param args
* @Throws
* @Return void
* @Date 2024-09-20 17:10:13
* @Author WangKun
**/
public static void main(String[] args) {
log.info("---> 开始!");
TABLES.add("sys_user");
TABLES.add("sys_log");
log.info("---> 添加表{} ", TABLES.toString());
VelocityTemplate.velocityTemplate();
log.info("---> 结束!");
}
// 以下为数据库设置
// 数据库
public static final String DB = "wk-admin1";
// 主机
public static final String HOST = "127.0.0.1";
// 端口号
public static final String PORT = "3306";
// URL
public static final String URL = "jdbc:mysql://" + HOST + ":" + PORT + "/" + DB + "?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true";
// 用户名
public static final String USER_NAME = "root";
// 密码
public static final String PASSWORD = "123456";
// 以下为包名设置
// 设置父包名
public static final String PARENT = "com.xxx";
// 父包
public static final String MODULE_NAME = "module";
// 设置实体类包名
public static final String ENTITY = "entity";
// 设置 Service 接口包名
public static final String SERVICE = "service";
// 设置 Service 实现类包名
public static final String SERVICE_IMPL = "serviceImpl";
// 设置 Mapper 接口包名
public static final String MAPPER = "mapper";
// 设置 Mapper XML 文件包名
public static final String MAPPER_XML = "mapper.xml";
// 设置 Controller 包名
public static final String CONTROLLER = "controller";
// 输出路径
public static final String OUTPUT_DIR = System.getProperty("user.home") + "/Desktop";
// 表集合
public static final List<String> TABLES = new ArrayList<>();
模板配置:
/**
* @Description 代码模板
* @Author WangKun
* @Date 2024/9/18 15:53
* @Version
*/
public class VelocityTemplate {
// 数据源
private static final DataSourceConfig.Builder DATA_SOURCE_CONFIG = new DataSourceConfig
.Builder(URL, USER_NAME, PASSWORD);
/**
* @param
* @Description 生成模板
* @Throws
* @Return void
* @Date 2024-09-18 15:42:51
* @Author WangKun
**/
public static void velocityTemplate() {
// 使用 FastAutoGenerator 快速配置代码生成器
FastAutoGenerator.create(DATA_SOURCE_CONFIG)
.globalConfig(builder -> {
builder.outputDir(OUTPUT_DIR) // 指定输出目录
.disableOpenDir()//禁止加载完之后打开
.dateType(DateType.SQL_PACK) //时间策略DateType.ONLY_DATE 默认值: DateType.TIME_PACK
.commentDate("yyyy-MM-dd HH:mm:ss");//注释的日期
})
.packageConfig(builder -> {
builder.parent(PARENT) // 设置父包名
.moduleName(MODULE_NAME)// 父包
.entity(ENTITY) // 设置实体类包名
.service(SERVICE) // 设置 Service 接口包名
.serviceImpl(SERVICE_IMPL) // 设置 Service 实现类包名
.mapper(MAPPER) // 设置 Mapper 接口包名
.xml(MAPPER_XML) // 设置 Mapper XML 文件包名
.controller(CONTROLLER); // 设置 Controller 包名
})
.strategyConfig(builder -> {
builder.addInclude(TABLES) // 设置需要生成的表名,多个表“”,“”
.addTablePrefix("t_", "c_", "hw_") // 设置过滤表前缀 去除表的前缀如果t_user则变成User而不包含TUser
.enableSkipView()//开启跳过视图
//策略配置
//entity层
.entityBuilder()
.javaTemplate("templates/entity.java.vm") // 设置实体类模板
.enableLombok() // 启用 Lombok
.naming(NamingStrategy.underline_to_camel)//开启驼峰命名
.logicDeleteColumnName("isDelete")//设置逻辑删除字段注解 @TableLogic
.idType(IdType.AUTO)//设置主键类型 @TableId
.enableFileOverride() // 覆盖已生成文件
//service层
.serviceBuilder()
.serviceTemplate("/templates/service.java.vm") // 设置 Service 模板
.formatServiceFileName("%sService") //service层的拼接比如实体类时User拼接成UserService
.serviceImplTemplate("/templates/serviceImpl.java.vm") // 设置 ServiceImpl 模板
.formatServiceImplFileName("%sServiceImp") //service层的拼接比如实体类时User拼接成UserServiceImpl
.enableFileOverride() // 覆盖已生成文件
//mapper层
.mapperBuilder()
.mapperTemplate("/templates/mapper.java.vm") // 设置 Mapper 模板
.enableMapperAnnotation() //开启@Mapper注解
.formatMapperFileName("%sMapper") //mapper层的拼接比如实体类时User拼接成UserMapper.xml
.mapperXmlTemplate("/templates/mapper.xml.vm") // 设置 xml 模板
.formatXmlFileName("%sMapper.xml") //mapper层的拼接比如实体类时User拼接成UserMapper.xml
.enableFileOverride() // 覆盖已生成文件
//controller层
.controllerBuilder()
.template("templates/controller.java.vm") // 设置 Controller 模板
.formatFileName("%sController")//controller层的拼接比如实体类时User拼接成UserController
.enableRestStyle()//开启rest风格,主要为加了@RestController
.enableHyphenStyle()//开启驼峰命名
.enableFileOverride();// 覆盖已生成文件
})
.execute(); // 执行生成
}
}
自定义模板:在resources下新建以下模板
controller.java.vm
package ${package.Controller};
import ${package.Service}.${entity}Service
import lombok.RequiredArgsConstructor;
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
/**
* @Description ${entity}前端控制器
* @Author WangKun
* @Date ${date}
* @Version
*/
@RequiredArgsConstructor
#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
private final ${entity}Service ${table.entityPath}Service;
}
#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;
import java.io.Serial;
#if(${chainModel})
import lombok.experimental.Accessors;
#end
#end
/**
* @Description ${entity}实体类
* @Author WangKun
* @Date ${date}
* @Version
*/
#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})
@Serial
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
/**
* @Description ${entity}Mapper 接口
* @Author WangKun
* @Date ${date}
* @Version
*/
#if(${mapperAnnotationClass})
@${mapperAnnotationClass.simpleName}
#end
#if(${kotlin})
interface ${table.mapperName} : ${superMapperClass}<${entity}>
#else
public interface ${table.mapperName} extends ${superMapperClass}<${entity}> {
}
#end
mapper.xml.vm
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="${package.Mapper}.${table.mapperName}">
#if(${enableCache})
<!-- 开启二级缓存 -->
<cache type="${cacheClassName}"/>
#end
#if(${baseResultMap})
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="${package.Entity}.${entity}">
#foreach($field in ${table.fields})
#if(${field.keyFlag})##生成主键排在第一位
<id column="${field.name}" property="${field.propertyName}" />
#end
#end
#foreach($field in ${table.commonFields})##生成公共字段
<result column="${field.name}" property="${field.propertyName}" />
#end
#foreach($field in ${table.fields})
#if(!${field.keyFlag})##生成普通字段
<result column="${field.name}" property="${field.propertyName}" />
#end
#end
</resultMap>
#end
#if(${baseColumnList})
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
#foreach($field in ${table.commonFields})
${field.columnName},
#end
${table.fieldNames}
</sql>
#end
</mapper>
service.java.vm
package ${package.Service};
import ${package.Entity}.${entity};
import ${superServiceClassPackage};
/**
* @Description ${entity}服务类
* @Author WangKun
* @Date ${date}
* @Version
*/
#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};
#if(${generateService})
import ${package.Service}.${table.serviceName};
#end
import ${superServiceImplClassPackage};
import org.springframework.stereotype.Service;
/**
* @Description ${entity}服务实现类
* @Author WangKun
* @Date ${date}
* @Version
*/
@Service
#if(${kotlin})
open class ${table.serviceImplName} : ${superServiceImplClass}<${table.mapperName}, ${entity}>()#if(${generateService}), ${table.serviceName}#end {
}
#else
public class ${table.serviceImplName} extends ${superServiceImplClass}<${table.mapperName}, ${entity}>#if(${generateService}) implements ${table.serviceName}#end {
}
#end
原文地址:https://blog.csdn.net/WangKun_0612/article/details/142391541
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!