栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

Mybatis-plus代码生成器Entity中生成自定义枚举类型
  • 应用场景
  • 生成代码效果
  • mybatis-plus代码生成器相关依赖
  • 代码实现
    • 代码生成器代码
    • 枚举代码

应用场景

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

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

生成代码效果

数据库字段:

生成的实体类:

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

    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";
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424257.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号