- 应用场景
- 生成代码效果
- mybatis-plus代码生成器相关依赖
- 代码实现
- 代码生成器代码
- 枚举代码
由于数据库表中有很多状态类字段,这类字段在数据库中int类型,在JAVA中式Enum类型,而生成的代码是Integer类型,需要手工去调整类型,嫌麻烦,所以就将对应的状态字段在生成的时候直接将字段生成为Enum
mybatis-plus代码生成器官方文档:https://baomidou.com/guide/generator-new.html
生成代码效果数据库字段:
生成的实体类:
代码实现 代码生成器代码org.springframework.boot spring-boot-starter-test test com.baomidou mybatis-plus 3.4.0 com.baomidou mybatis-plus-generator 3.5.1 com.baomidou mybatis-plus-support 2.3.1 com.baomidou mybatis-plus-extension 3.4.1
package com.xintech.reverse.service.config;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
import com.xintech.reverse.service.entity.baseBoPlus;
import org.junit.Test;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
public class MybatisCodeGenerate {
String packageName = "com.**.reverse";
String dbUrl = "***";
String userName = "***";
String password = "***";
String author = "**";
String outputDir = "src\main\java";
@Test
public void generateCode() {
Map map = new HashMap<>();
map.put("sex",Sex.MAN);
generateTableCode("student",map);
}
public static String name = "";
private void generateTableCode(String tableName,Map map) {
FastAutoGenerator.create(new DataSourceConfig.Builder(dbUrl, userName, password)
.keyWordsHandler(
new MySqlKeyWordsHandler() {
@Override
public boolean isKeyWords(String columnName) {
//获取当前正在生成的字段名称
name = columnName;
return this.getKeyWords().contains(columnName.toUpperCase(Locale.ENGLISH));
}
}
).typeConvert(
new MySqlTypeConvert() {
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig,
String fieldType) {
//根据字段名称判断是否需要转换为枚举
if(map.get(name) != null){
return map.get(name);
}
return (DbColumnType)super.processTypeConvert(globalConfig, fieldType);
}
}
)
)
//全局配置
.globalConfig(builder -> {
builder.fileOverride().disableOpenDir().outputDir(outputDir).author(
author).enableSwagger()
.commentDate("yyyy-MM-dd").dateType(DateType.TIME_PACK).build();
})
//包配置
.packageConfig(builder -> {
builder.parent(packageName).entity("service.entity").service("service.service")
.serviceImpl("service.service").mapper("service.dao").xml(
"service.dao").build();
})
//策略配置
.strategyConfig(builder -> {
builder.enableCapitalMode()
.addInclude(tableName)
.addTablePrefix("biz_").build()
.entityBuilder().enableLombok().enableRemoveIsPrefix()
.addSuperEntityColumns("version", "create_user", "create_date", "update_user",
"update_date")
.naming(NamingStrategy.underline_to_camel)
.superClass(baseBoPlus.class).build()
.mapperBuilder().enablebaseResultMap().enablebaseColumnList().build();
})
//使用Freemarker引擎模板
.templateEngine(new FreemarkerTemplateEngine()).execute();
}
}
枚举代码
枚举需要实现 IColumnType接口
package com.xintech.reverse.service.config;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
public enum Sex implements IColumnType {
MAN(1,"男"),WOMAN(2,"女");
private int code;
private String value;
Sex(int code,String value){
this.code = code;
this.value = value;
}
@Override
public String getType() {
return "Sex";
}
@Override
public String getPkg() {
return "com.xintech.reverse.service.config.Sex";
}
}



