Mybatis-plus代码生成器Entity中生成自定义枚举类型

Mybatis-plus代码生成器Entity中生成自定义枚举类型

  • 应用场景
  • 生成代码效果
  • mybatis-plus代码生成器相关依赖
  • 代码实现
    • 代码生成器代码
    • 枚举代码

应用场景

由于数据库表中有很多状态类字段,这类字段在数据库中int类型,在JAVA中式Enum类型,而生成的代码是Integer类型,需要手工去调整类型,嫌麻烦,所以就将对应的状态字段在生成的时候直接将字段生成为Enum

mybatis-plus代码生成器官方文档:https://baomidou.com/guide/generator-new.html

生成代码效果

数据库字段:
Mybatis-plus代码生成器Entity中生成自定义枚举类型_第1张图片
生成的实体类:
Mybatis-plus代码生成器Entity中生成自定义枚举类型_第2张图片

mybatis-plus代码生成器相关依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus</artifactId>
    <version>3.4.0</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-support</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.4.1</version>
</dependency>

代码实现

代码生成器代码

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;


/**
 * mybatis代码生成器
 */
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<String, IColumnType> map = new HashMap<>();
        map.put("sex",Sex.MAN);
        generateTableCode("student",map);
    }

    public static String name = "";
    /**
     * mybatis代码生成器
     */
    private void generateTableCode(String tableName,Map<String, IColumnType> 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";
    }

    /**
     * 返回包路径包含名称
     * @return
     */
    @Override
    public String getPkg() {
        return "com.xintech.reverse.service.config.Sex";
    }
}

你可能感兴趣的:(Mybatis,java,开发语言,后端)