mybatis plus代码生成配置,注意点如下:
- 详细文档参考文档
- 这里的代码只写了日常使用到的,例如模板等一些都没有配置,参考文档可以自行配置
- 如果只针对部分表生成,可以使用如下代码,也可以修改策略配置即可
- 最终的生成格式等,自行执行一下看看即可,不合适的地方对应自行调整
- 本文章仅仅作为个人记录,以防后面用到,同时分享出来给大家参考,代码是参考文档写的
package demo.jiangkd.mybatis.generator;
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.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import demo.jiangkd.mybatis.MybatisPlusApplication;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.Mapper;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.Collections;
import java.util.function.Consumer;
/**
* 代码生成器
*
* @author jiangkd
* @date 2024/1/16 14:06:59
*/
@SpringBootTest(classes = MybatisPlusApplication.class)
@RunWith(SpringRunner.class)
@Slf4j
public class CodeGeneratorTest {
@Value("${spring.datasource.url}")
private String url;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
/**
* MP-代码生成器配置新
* https://baomidou.com/pages/981406/#%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE-datasourceconfig
*/
@Test
public void testGenerator() {
/*
数据库配置
*/
final DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(url, username, password);
/*
代码生成器, 同时注入数据库配置
*/
FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
/*
1,全局配置(GlobalConfig)
*/
fastAutoGenerator = fastAutoGenerator.globalConfig(this.globalConfig());
/*
2,包配置(PackageConfig)
*/
fastAutoGenerator = fastAutoGenerator.packageConfig(this.packageConfig());
/*
3,模板配置(TemplateConfig)
*/
fastAutoGenerator = fastAutoGenerator.templateConfig(this.templateConfig());
/*
4,注入配置(InjectionConfig)
*/
fastAutoGenerator = fastAutoGenerator.injectionConfig(this.injectionConfig());
/*
5,策略配置(StrategyConfig)
*/
fastAutoGenerator = fastAutoGenerator.strategyConfig(this.strategyConfig());
// 执行输出
fastAutoGenerator.execute();
}
/**
* 策略配置(StrategyConfig)
*/
private Consumer<StrategyConfig.Builder> strategyConfig() {
return strategyConfigBuilder -> strategyConfigBuilder
// 模糊表匹配(sql 过滤), likeTable 与 notLikeTable 只能配置一项
// 模糊表排除(sql 过滤), likeTable 与 notLikeTable 只能配置一项
// 增加表匹配(内存过滤), include 与 exclude 只能配置一项 ,支持正则匹配、例如 ^t_.* 所有 t_ 开头的表名
.addInclude("表1", "表2")
// 增加表排除匹配(内存过滤), include 与 exclude 只能配置一项 ,支持正则匹配、例如 .*st$ 所有 st 结尾的表名
// 增加过滤表前缀
// 增加过滤表后缀
// 增加过滤字段前缀
// 增加过滤字段后缀
/*
实体策略配置
*/
.entityBuilder()
// 覆盖已生成文件
.enableFileOverride()
// 开启链式模型
.enableChainModel()
// 开启 lombok 模型
.enableLombok()
// 开启 Boolean 类型字段移除 is 前缀
.enableRemoveIsPrefix()
// 开启生成实体时生成字段注解
.enableTableFieldAnnotation()
// 开启 ActiveRecord 模型
.enableActiveRecord()
// 逻辑删除 以及 乐观所等
// 数据库表映射到实体的命名策略
.naming(NamingStrategy.underline_to_camel)
// 数据库表字段映射到实体的命名策略, 默认为 null,未指定按照 naming 执行
// 全局主键类型
.idType(IdType.AUTO)
// 格式化文件名称
.formatFileName("%sEntity")
/*
controller策略配置
*/
.controllerBuilder()
// 覆盖已生成文件
.enableFileOverride()
// enableHyphenStyle, 开启驼峰转连字符, 默认值 false
// 开启生成@RestController 控制器
.enableRestStyle()
//
/*
service策略配置
*/
.serviceBuilder()
// 设置service接口父类
.superServiceClass(IService.class)
// 设置 service 实现类父类
.superServiceImplClass(ServiceImpl.class)
// 覆盖已生成文件
.enableFileOverride()
/*
mapper策略配置
*/
.mapperBuilder()
// 设置父类
.superClass(BaseMapper.class)
// 覆盖生成的文件
.enableFileOverride()
// 开启@Mapper注解
.mapperAnnotation(Mapper.class)
.build();
}
/**
* 注入配置(InjectionConfig)
*/
private Consumer<InjectionConfig.Builder> injectionConfig() {
return injectionConfigBuilder -> injectionConfigBuilder.build();
}
/**
* 模板配置(TemplateConfig)
*/
private Consumer<TemplateConfig.Builder> templateConfig() {
return templateConfigBuilder -> templateConfigBuilder.build();
}
/**
* 包配置(PackageConfig)
*/
private Consumer<PackageConfig.Builder> packageConfig() {
return packageConfigBuilder -> packageConfigBuilder
// 父包名
.parent("demo.jiangkd.mybatis.plus")
// entity包名
.entity("entity")
// service包名
.service("service")
// service impl包名
.serviceImpl("service.impl")
// Mapper包名
.mapper("mapper")
// mapper xml包名
.xml("mapper.xml")
// controller包名
.controller("controller")
// 路径配置信息, 这里配置mapper xml的路径
.pathInfo(Collections.singletonMap(OutputFile.xml, "D://mapperxml"));
}
/**
* 全局配置(GlobalConfig)
*/
private Consumer<GlobalConfig.Builder> globalConfig() {
return globalConfigBuilder -> globalConfigBuilder
// 指定输出目录
.outputDir("D://")
// 作者
.author("jiangkd")
// 时间策略
.dateType(DateType.TIME_PACK)
// 注释时间
.commentDate("yyyy-MM-dd HH:mm:ss");
}
}