Mybatis-Plus网址: https://baomidou.com/pages/779a6e/#%E4%BD%BF%E7%94%A8
根据官网代码制作自己的代码生成器CodeGenerator.java如下:
package com.scancode.common;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;
import java.util.ArrayList;
/**
* @Author tianyw
* @create 2022/9/15 23:24
*/
// MyBatis-Plus代码自动生成器
public class CodeGenerator {
@Test
public void run() {
// 1、创建MyBatisPlus代码生成器对象
AutoGenerator mg = new AutoGenerator();
//手动设置moduleName,项目子模块名称
//String projectModuleName = "";
// 2、全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir"); // 获得当前项目工程的路径
//String projectPath = System.getProperty("user.dir")+"/springboot-test"; // 获得当前项目工程子模块Module的路径
gc.setOutputDir(projectPath + "/src/main/java");
//gc.setOutputDir(projectPath + "/" + projectModuleName + "/src/main/java");
gc.setAuthor("tianyw");
gc.setOpen(false); // 生成后是否打开所在文件夹
gc.setFileOverride(false); // 重新生成时文件不覆盖方便累加新表
gc.setEntityName("%s"); // 实体类名:直接用表名(自动转驼峰命名) %s=表名 %s会自动填充表实体属性!
gc.setMapperName("%sMapper"); // mapper接口名:表名+Mapper
gc.setServiceName("%sService"); // service 命名:去掉Service接口的首字母I前缀
gc.setServiceImplName("%sServiceImpl"); // service impl 命名
gc.setXmlName("%sMapper"); // mapper.xml文件名
gc.setIdType(IdType.ID_WORKER); // 主键策略 id全局唯一
gc.setDateType(DateType.ONLY_DATE); // 定义生成的实体类中日期类型
gc.setSwagger2(true); // 开启实体属性Swagger2注解
gc.setBaseResultMap(true); // 会在mapper.xml映射文件中生成一个基础的<ResultMap> 映射所有的字段
mg.setGlobalConfig(gc); // 将配置丢到自动生成器里面
// 3、数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/springboot_vue?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimeZone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setDbType(DbType.MYSQL);
mg.setDataSource(dsc);
// 4、包的配置
PackageConfig pc = new PackageConfig();
pc.setParent("com"); // 包名
pc.setModuleName("scancode"); // 模块名就是在包名下再建一个目录的名字
pc.setController("controller");
pc.setEntity("entity");
pc.setService("service");
pc.setMapper("mapper");
mg.setPackageInfo(pc);
// 5、策略配置
StrategyConfig sc = new StrategyConfig();
//sc.setInclude("t_user", "t_position", "t_user_position", "t_disinfect_object", "t_disinfect_operate_comment", "t_disinfectant_match_comment");
sc.setInclude("t_menu");
//sc.setLikeTable(new LikeTable("t_")); // 按前缀生成多张表
sc.setNaming(NamingStrategy.underline_to_camel); // 下滑线转驼峰命名
sc.setColumnNaming(NamingStrategy.underline_to_camel); // 列-下滑线转驼峰命名,数据库表字段映射到实体的命名策略
sc.setTablePrefix("t_"); // 去掉设置表前缀t_
// strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
sc.setEntityLombokModel(true); //自动生成 lombok 模型 @Accessors(chain = true) setter链式操作
sc.setLogicDeleteFieldName("deleted"); // 逻辑删除配置
sc.setRestControllerStyle(true); // 开启 restfull 的驼峰命名
sc.setControllerMappingHyphenStyle(true); // url中驼峰转连字符 url地址变为下划线 localhost:8080/hello_id_23
mg.setStrategy(sc);
// 自动填充配置
TableFill createTime = new TableFill("create_time", FieldFill.INSERT);
TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);
ArrayList<TableFill> tableFills = new ArrayList<>();
tableFills.add(createTime);
tableFills.add(updateTime);
sc.setTableFillList(tableFills);
// 乐观锁配置
sc.setVersionFieldName("version");
// 6、执行
mg.execute();
}
}