使用mybatis-plus(mp)自动生成各个层的代码,减轻开发工作,不过现在用mybatis-flex的越来越多,综合性能更好。
1.pom文件简要
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3</version>
</dependency>
<!--mybatis-plus 代码生成器依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.32</version>
<scope>compile</scope>
</dependency>
2.CodeGenerator代码生成器类
配置具体内容,运行该类即可
package com.wei.easyexcel.config;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.fill.Column;
import com.baomidou.mybatisplus.generator.fill.Property;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @BelongsProject: easyExcel
* @BelongsPackage: com.wei.easyexcel.config
* @ClassName Generator
* @Author: weiq
* @CreateTime: 2024-03-01 14:35
* @Description: TODO
* @Version: 1.0
*/
/**
* <p>
* mysql 代码生成器
* </p>
*/
public class CodeGenerator {
@Test
public void run() {
FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/numone-springboot?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=Asia/Shanghai",
"root",
"root
")
//全局配置
.globalConfig(builder ->
{
builder.fileOverride()
.disableOpenDir()//禁止打开输出目录 默认为true
.outputDir("D:\\code\\code\\easyExcel\\src\\main\\java")//指定输出目录
.author("weiq")//作者名
// .enableKotlin()//开启 kotlin 模式
.enableSwagger()//开启 swagger 模式
.dateType(DateType.TIME_PACK)//时间策略
.commentDate("yyyy-MM-dd");//注释日期
})
//包配置
.packageConfig(builder ->
{
builder.parent("com")//父包名
.moduleName("wei.easyexcel")//父包模块名
.entity("entity")//Entity 包名
.service("service")//Service 包名
.serviceImpl("Impl")//Service Impl 包名
.mapper("mapper")//Mapper 包名
.xml("mapperXml")//Mapper XML 包名
.controller("controller");//Controller 包名
//.other("other")
// .pathInfo(Collections.singletonMap(OutputFile.xml, "D://"))//路径配置信息
})
//模板配置
.templateConfig(builder ->
{
builder.disable(TemplateType.ENTITY)//禁用模板
.entity("/templates/entity.java")//设置实体模板路径(JAVA)
.service("/templates/service.java")
.serviceImpl("/templates/serviceImpl.java")
.mapper("/templates/mapper.java")
.xml("/templates/mapper.xml")
.controller("/templates/controller.java");
})
//策略配置
.strategyConfig(builder ->
{
builder.enableCapitalMode()//开启大写命名
// .enableSkipView()
// .disableSqlFilter()
// .likeTable(new LikeTable("USER"))
// .addInclude("t_simple")
.addTablePrefix("t_")//去掉表前缀
// .addFieldSuffix("_flag")//去掉表后缀
//Entity配置策略
.entityBuilder()//名称转换实现
// .superClass(com.baomidou.global.BaseEntity)设置父类
// .disableSerialVersionUID()//禁用生成 serialVersionUID
.enableChainModel()//开启链式模型 默认为false
.enableLombok()//开启 lombok 模型 默认为false
.enableRemoveIsPrefix()//开启 Boolean 类型字段移除 is 前缀 默认为false
.enableTableFieldAnnotation()//开启生成实体时生成字段注解 默认为false
.enableActiveRecord()//开启 ActiveRecord 模型 默认为false
.versionColumnName("version")//乐观锁数据库字段
.versionPropertyName("version")//乐观锁实体名
.logicDeleteColumnName("deleted")//删除数据库字段
.logicDeletePropertyName("deleteFlag")//删除实体名
// .naming(NamingStrategy.underline_to_camel)//数据库表映射到实体的命名策略 这里是下划线转驼峰
.columnNaming(NamingStrategy.underline_to_camel)//数据库字段表映射到实体的命名策略
.addSuperEntityColumns("created_by", "created_time", "updated_by", "updated_time")//添加父类公共字段 数据库写了就可以不加
.addIgnoreColumns()//忽略字段
.addTableFills(new Column("create_time", FieldFill.INSERT))//表字段填充
.addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))//表字段填充
.idType(IdType.AUTO)//全局主键类型
.formatFileName("%sEntity")//格式化文件名称
//Controller策略配置
.controllerBuilder()
// .superClass(BaseController.class)//配置父类
.enableHyphenStyle()//开启驼峰转连字符 默认为false
.enableRestStyle()//开启生成@RestController 控制器 默认为false
.formatFileName("%sController")//格式化文件名称
//Service配置策略
.serviceBuilder()
.superServiceClass(IService.class)//设置 service 接口父类
.superServiceImplClass(ServiceImpl.class)//设置 service 实现类父类
.formatServiceFileName("%sService")//格式化 service 接口文件名称
.formatServiceImplFileName("%sServiceImp")//格式化 service 实现类文件名称
//Mapper策略配置
.mapperBuilder()
.superClass(BaseMapper.class)//设置父类
.enableMapperAnnotation()//开启@Mapper注解 默认false
.enableBaseResultMap()//启用 BaseResultMap 生成 默认false
.enableBaseColumnList()//启用 BaseColumnList 默认false
// .cache(MyMapperCache.class)//设置缓存实现类
.formatMapperFileName("%sDao")//格式化 mapper 文件名称
.formatXmlFileName("%sXml");//格式化 xml 实现类文件名称
})
.templateEngine(new FreemarkerTemplateEngine())
.execute();
}
}