MyBatisPlus 3.5.1代码生成

667 阅读1分钟

MyBatisPlus 升级到 3.5.1 (上个版本3.3.1)版本后,发现一些 api 调用方式调整了。代码生成器也是一堆提示。根据官网说明,现将新的代码生成方式贴出来,供参考。

支持手动输入模块及表名,部分属性定义了没使用,待扩展。


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.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.apache.commons.lang3.StringUtils;

import java.nio.file.Paths;
import java.util.*;

public class CodeGenerator {
    private static Map<String, Map<String, Object>> properties = new HashMap<>();

    public static String projectName = "";
    public static String parentPackage = "com.example";
    public static List tablePrefix = Arrays.asList();
    public static String url = "jdbc:mysql://127.0.0.1:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true";
    public static String username = "root";
    public static String password = "123456";
    public static String database = "test";
    public static String driverClass = "com.mysql.cj.jdbc.Driver";

    /**
     * <p>
     * 读取控制台内容
     * </p>
     */
    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) {
        generator();
    }

    public static void generator() {
        System.out.println("properties:" + properties);

        DataSourceConfig dataSourceConfig = new DataSourceConfig.Builder(url, username, password).build();

        String userDir = System.getProperty("user.dir");
        String projectPath = Paths.get(userDir, projectName).toString();
        // 全局配置
        GlobalConfig globalConfig = new GlobalConfig.Builder()
                .outputDir(Paths.get(projectPath, Paths.get("src", "main", "gen").toString()).toString())
                .author("generator")
                //.disableOpenDir()
                .fileOverride() // 覆盖已生成的文件
                .dateType(DateType.ONLY_DATE).build();

        String outOutputDir = globalConfig.getOutputDir();
        System.out.println("outOutputDir:" + outOutputDir);

        // 包配置
        PackageConfig packageConfig = new PackageConfig.Builder()
                .parent(parentPackage)
                .entity("domain.entity")
                .moduleName(scanner("模块名"))
                .build();
        System.out.println("parentPackage:" + packageConfig.getParent());

        StrategyConfig.Builder strategyConfigBuilder = new StrategyConfig.Builder();

        strategyConfigBuilder.addInclude(scanner("表名,多个英文逗号分割").split(","));

        // Entity策略
        strategyConfigBuilder.entityBuilder()
                .idType(IdType.AUTO)
                .enableLombok()
                .naming(NamingStrategy.underline_to_camel)
                .columnNaming(NamingStrategy.underline_to_camel)
                .formatFileName("%sEntity")
                // .enableRemoveIsPrefix()
        ;

        // Mapper策略
        strategyConfigBuilder.mapperBuilder()
                .enableBaseResultMap()
                .enableBaseColumnList();

        // 模板配置
        TemplateConfig templateConfig = new TemplateConfig.Builder()
                .disable(TemplateType.CONTROLLER)
                .build();

        // 代码生成器
        AutoGenerator autoGenerator = new AutoGenerator(dataSourceConfig)
                .global(globalConfig)
                .packageInfo(packageConfig)
                .template(templateConfig)
                .strategy(
                        strategyConfigBuilder.build()
                );

        autoGenerator.execute();
    }
}

效果

依赖参考

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!--mybatis plus-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

<!--p6spy-->
<dependency>
    <groupId>p6spy</groupId>
    <artifactId>p6spy</artifactId>
    <version>3.8.7</version>
</dependency>

<!--mybatis plus generator-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.1</version>
</dependency>

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.3</version>
</dependency>