Mybatis-plus代码生成器

wuchangjian2021-11-10 17:28:12编程学习

首先引入依赖pom依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>

代码如下

工具类

直接上代码

package com.zt.auth.generator;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
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 org.apache.commons.lang3.StringUtils;

import java.util.Scanner;

/**
 * 代码生成器
 * 可以将该文件设为 git 忽略
 **/
public class CodeGenerator {

    /**
     * 数据库链接
     */
    private static final String DATA_SOURCE_URL = "";
    /**
     * 账号
     */
    private static final String DATA_SOURCE_USERNAME = "";
    /**
     * 密码
     */
    private static final String DATA_SOURCE_PASSWORD = "";
    /**
     * 包地址
     */
    private static final String PACKAGE_NAME = "com.*";
    /**
     * 实体的包名名
     */
    private static final String ENTITY = "dao";
    /**
     * 作者
     */
    private static final String AUTHOR = "";

    /**
     * 为了用起来更方便,表名在控制台输入
     * @param tip 表名
     * @return
     */
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotEmpty(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

    public static void main(String[] args) {
        AutoGenerator autoGenerator = new AutoGenerator();

        //获取当前项目最外层的工作目录
        String projectPath = System.getProperty("user.dir");

        //全局配置
        GlobalConfig gc = new GlobalConfig();
        //输出目录(生成的文件会放到这个目录下)
        gc.setOutputDir(projectPath)
                //作者
                .setAuthor(AUTHOR)
                //是否覆盖已有文件
                .setFileOverride(true)
                //是否打开输出目录
                .setOpen(false)
                //开启 swagger2 模式
                .setSwagger2(true)
                //时间类型
                //DateType.ONLY_DATE == java.util.Date;
                //DateType.SQL_PACK == java.sql.Timestamp;;
                //DateType.TIME_PACK == java.time.LocalDateTime;
                .setDateType(DateType.TIME_PACK)
                //生成resultMap
                .setBaseResultMap(true)
                //生成 columnList
                .setBaseColumnList(true)
                //主键策略
                //IdType.AUTO == id自增
                //IdType.NONE == 无状态,该类型为未设置主键类型
                //IdType.INPUT == 手动添加
                //IdType.ASSIGN_ID == 雪花算法
                //IdType.ASSIGN_UUID == 分配UUID
                .setIdType(IdType.AUTO)
                //生成的service接口名字首字母是否为I,这样设置就没有
                .setServiceName("%sService");
        autoGenerator.setGlobalConfig(gc);

        //数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl(DATA_SOURCE_URL)
                .setDriverName("com.mysql.cj.jdbc.Driver")
                .setUsername(DATA_SOURCE_USERNAME)
                .setPassword(DATA_SOURCE_PASSWORD);
        autoGenerator.setDataSource(dsc);

        //包结构配置
        PackageConfig pc = new PackageConfig();
        //包路径
        pc.setParent(PACKAGE_NAME);
        //实体的包名名
        pc.setEntity(ENTITY);
        //设置模块名(包名)生成的代码会放在这里面
        pc.setModuleName(null);
        autoGenerator.setPackageInfo(pc);

        //数据库表配置
        StrategyConfig sc = new StrategyConfig();
        //NamingStrategy.underline_to_camel == 字段驼峰命名
        //NamingStrategy.no_change == 不做任何改变,原样输出
        //文件名
        sc.setNaming(NamingStrategy.underline_to_camel);
        //字段名
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        //是否使用Lombok
        sc.setEntityLombokModel(true);
        //是否生成实体时,生成字段注解
        sc.setEntityTableFieldAnnotationEnable(true);
        //驼峰转连字符
        sc.setControllerMappingHyphenStyle(true);
        //生成 @RestController 控制器
        sc.setRestControllerStyle(true);
        //控制台输入表名
        String tableName = scanner("输入表名 如 uc_test_table");
        //表名
        sc.setInclude(tableName);
        //有表前缀,如果不想要前缀(放开下面方法)
//        if (tableName.contains("_")){
//            String prefex = tableName.substring(0,tableName.indexOf("_")+1);
//            sc.setTablePrefix(prefex);
//        }
        //实现 ITypeConvert 接口自定义数据库 字段类型 转换为自己需要的 java 类型
        dsc.setTypeConvert(new MySqlTypeConvert(){
            @Override
            public IColumnType processTypeConvert(GlobalConfig config, String fieldType) {
                //将tinyint类型转换为java的Integer(默认是Boolean)
                if(fieldType.toLowerCase().contains("tinyint")){
                    return DbColumnType.INTEGER;
                }
                return super.processTypeConvert(config, fieldType);
            }
        });
        autoGenerator.setStrategy(sc);

        //模板配置
        TemplateConfig templateConfig = new TemplateConfig();
        autoGenerator.setTemplate(templateConfig);
        autoGenerator.setTemplateEngine(new FreemarkerTemplateEngine());

        //执行
        autoGenerator.execute();
    }

}

启动后在控制台输入需要生成的数据库表名:

输入表名回车,神奇的事情发生了,在你工作目录的根目录生成了文件:

如果工具类不符合要求需要调整:可以看看官网的配置(官网)

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。