MyBatis-Plus代码生成组件​mybatis-plus-generator​升级到3.5.3后,fileOverride()方法过期,虽然还可以使用,但是控制台会有一个警告,而且提示在下个版本原本的方法就会删除。在此之前,使用代码生成使用的网上找到的代码生成的代码一直在用,稀里糊涂,正好借此机会好好的研究了一下​mybatis-plus-generator​的使用。

本文就不再写从零开始代码生成,因为这些官网的文档都写了,只是新版本的改动官方文档还没有提。

FastAutoGenerator

​​FastAutoGenerator是代码生成主要的类,看源码就可以看到,主要使用的配置就是下面的几个。只需要分别配置这几个Builder,就可以配置代码生成了。

private FastAutoGenerator(DataSourceConfig.Builder dataSourceConfigBuilder) {
	//数据源配置 Builder
        this.dataSourceConfigBuilder = dataSourceConfigBuilder;
	//全局配置 Builder
        this.globalConfigBuilder = new GlobalConfig.Builder();
	//包配置 Builder
        this.packageConfigBuilder = new PackageConfig.Builder();
	//策略配置 Builder
        this.strategyConfigBuilder = new StrategyConfig.Builder();
	//注入配置 Builder
        this.injectionConfigBuilder = new InjectionConfig.Builder();
	//模板配置 Builder
        this.templateConfigBuilder = new TemplateConfig.Builder();
    }

​​这次版本升级估计应该是将几个配置移到了策略配置下,比如fileOverride这个配置。

代码生成

在FastAutoGenerator的几个config方法中传入对应的Build即可,可以分别看一下这几个Build的源码就可以知道有些那是可以配置的。

可以看到的是策略配置strategyConfig中有通用的和分别针对实体类的、Mapper、Service和Controller的。

下面贴出我挑出来的一些配置

/**
     * MySQL数据表代码生成
     */
    @Test
    public void mysqlGen(){
        //数据库连接
        String url = "jdbc:mysql://192.168.196.144:3306/bootdemo?useSSL=false&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&transformedBitIsBoolean=true&serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true&allowPublicKeyRetrieval=true";
        //数据用户名
        String username = "root";
        //数据库密码
        String password = "root";

        FastAutoGenerator.create(url,username,password)
                .globalConfig(builder -> {
                    builder.author("xgblack") // 设置作者
                            //.enableSwagger() // 开启 swagger 模式
                            //.fileOverride() // 覆盖已生成文件,3.5.4版本后方法废弃
                            .disableOpenDir()
                            .outputDir("E:\\Files\\Tmp\\gen\\"); // 指定输出目录(代码文件输出目录)
                })
                .packageConfig(builder -> {
                    builder.parent("com.demo") // 设置父包名
                            .moduleName("app") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "E:\\Files\\Tmp\\gen\\mapper\\")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    //基础配置
                    builder
                            //.addTablePrefix() // 设置过滤表前缀
                            .addInclude("engine_job"); // 设置需要生成的表名
                })
                .strategyConfig(builder -> {
                    //实体类相关配置
                    builder.entityBuilder()
                            .enableTableFieldAnnotation() // 开启实体类字段注解
                            .enableLombok() // 开启lombok
                            .enableChainModel() // 开启链式模式
                            .enableFileOverride(); // 覆盖已生成文件
                })
                .strategyConfig(builder -> {
                    //mapper相关配置
                    builder.mapperBuilder()
                            .enableBaseResultMap() // 开启BaseResultMap
                            .enableBaseColumnList() // 开启BaseColumnList
                            .enableFileOverride(); // 开启覆盖已生成文件
                })
                .strategyConfig(builder -> {
                    //service相关配置
                    builder.serviceBuilder()
                            .enableFileOverride(); // 开启覆盖已生成文件
                })
                .strategyConfig(builder -> {
                    //controller相关配置
                    builder.controllerBuilder()
                            //.enableRestStyle()  //开启生成@RestController控制器
                            //.enableHyphenStyle() // 开启驼峰转连字符
                            .enableFileOverride(); // 覆盖已生成文件
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }


    /**
     * PG 数据表代码生成
     */
    @Test
    public void pgGen(){
        //数据库连接
        String url = "jdbc:postgresql://127.0.0.1:5432/bootdemopg";
        //数据用户名
        String username = "postgres";
        //数据库密码
        String password = "postgres";
        //模式名
        String schemaName = "animal";

        FastAutoGenerator.create(new DataSourceConfig.Builder(url, username, password).schema(schemaName))
                .globalConfig(builder -> {
                    builder.author("xgblack") // 设置作者
                            //.enableSwagger() // 开启 swagger 模式
                            //.fileOverride() // 覆盖已生成文件,3.5.4版本后方法废弃
                            .disableOpenDir()
                            .outputDir("E:\\Codes\\project_xg\\bootdemo\\src\\main\\java\\"); // 指定输出目录(代码文件输出目录)
                })
                .packageConfig(builder -> {
                    builder.parent("com.demo") // 设置父包名
                            .moduleName("app") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, "E:\\Codes\\project_xg\\bootdemo\\src\\main\\resources\\mapper\\")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    //基础配置
                    builder
                            //.addTablePrefix() // 设置过滤表前缀
                            .addInclude("engine_job"); // 设置需要生成的表名
                })
                .strategyConfig(builder -> {
                    //实体类相关配置
                    builder.entityBuilder()
                            .enableTableFieldAnnotation() // 开启实体类字段注解
                            .enableLombok() // 开启lombok
                            .enableChainModel() // 开启链式模式
                            .enableFileOverride(); // 覆盖已生成文件
                })
                .strategyConfig(builder -> {
                    //mapper相关配置
                    builder.mapperBuilder()
                            .enableBaseResultMap() // 开启BaseResultMap
                            .enableBaseColumnList() // 开启BaseColumnList
                            .enableFileOverride(); // 开启覆盖已生成文件
                })
                .strategyConfig(builder -> {
                    //service相关配置
                    builder.serviceBuilder()
                            .enableFileOverride(); // 开启覆盖已生成文件
                })
                .strategyConfig(builder -> {
                    //controller相关配置
                    builder.controllerBuilder()
                            //.enableRestStyle()  //开启生成@RestController控制器
                            //.enableHyphenStyle() // 开启驼峰转连字符
                            .enableFileOverride(); // 覆盖已生成文件
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }

​​