MyBatis-Plus 3.5.x新版代码生成器详细代码

MyBatis-Plus 3.5.x新版代码生成器使用详细代码

所需依赖

    
        <dependency>
            <groupId>com.baomidougroupId>
            <artifactId>mybatis-plus-generatorartifactId>
            <version>3.5.1version>
        dependency>

        
        <dependency>
            <groupId>org.freemarkergroupId>
            <artifactId>freemarkerartifactId>
            <version>2.3.30version>
        dependency>

生成器代码详解

/**
 * 3.5.x 新版生成器 可连远程数据库 ,旧版远程报错
 * new MyBatisGenerate.Builder()
 * .setDbName("universal_portal")
 * .setModule("")
 * .setPrefix(new String[]{""})
 * .setParentPackage("generate")
 * .setDbHostAndPort("localhost:3306")
 * .setDbUserName("root")
 * .setDbPsw("123456")
 * .setTables(new String[]{"user"})
 * .build()
 * .generate();
 *
 * @author bufei
 * @email 。。。
 * @date 2022/3/22 15:22
 */
@Data
public class MyBatisGenerate {

    /**
     * 数据库名称
     */
    private String dbName;
    /**
     * 模块名称
     */
    private String module;
    /**
     * 去除表前缀如t_ tb_
     */
    private String[] prefix;
    /**
     * 父级包名称如appenv
     */
    private String parentPackage;
    /**
     * 数据库host和端口
     */
    private String dbHostAndPort;
    /**
     * 数据库用户名
     */
    private String dbUserName;
    /**
     * 数据库密码
     */
    private String dbPsw;
    /**
     * 表名称 ,string数组
     */
    private String[] tables;

    private MyBatisGenerate(String dbName, String module, String[] prefix, String parentPackage, String dbHostAndPort, String dbUserName, String dbPsw, String[] tables) {
        this.dbName = dbName;
        this.module = module;
        this.prefix = prefix;
        this.parentPackage = parentPackage;
        this.dbHostAndPort = dbHostAndPort;
        this.dbUserName = dbUserName;
        this.dbPsw = dbPsw;
        this.tables = tables;
    }

    /**
     * 代码生成
     */
    public void generate() {
        // 数据源配置
        String url = "jdbc:mysql://" + dbHostAndPort + "/" + dbName + "?characterEncoding=utf8&useSSL=true&serverTimezone=Hongkong&strictUpdates=false&autoReconnect=true";
        DataSourceConfig dsb = new DataSourceConfig.Builder(url, dbUserName, dbPsw)
                .dbQuery(new MySqlQuery())
                // 库名
                .schema(dbName)
                .typeConvert(new MySqlTypeConvert())
                .keyWordsHandler(new MySqlKeyWordsHandler()).build();
        // 获取当前项目路径
        String projectPath = System.getProperty("user.dir");
        // 全局配置
        GlobalConfig gc = new GlobalConfig.Builder()
                // 输出目录
                .outputDir(projectPath + "/src/main/java")
                // 覆盖已生成文件
                .fileOverride()
                // 作者
                .author("bufei")
                // 启用swagger
                .enableSwagger()
                .dateType(DateType.TIME_PACK)
                .commentDate("yyyy-MM-dd HH:mm:ss")
                .build();
        // 包配置
        PackageConfig pc = new PackageConfig.Builder()
                .parent("edu.xupt.framework." + parentPackage)
                // 设置父包模块名
                .moduleName(module)
                // 设置实体包
                .entity("infrastructure.domain.model")
                // 服务类
                .service("infrastructure.repository")
                // 服务类实现
                .serviceImpl("infrastructure.repository.impl")
                .mapper("infrastructure.mapper")
                .xml("mapper.xml")
                .controller("controller")
                .other("other")
                // 路径信息
                .pathInfo(Collections.singletonMap(OutputFile.mapperXml, projectPath + "/src/main/resources/mybatis/mapper/"))
                .build();
        // 模板配置 不配无法生成
        TemplateConfig tc = new TemplateConfig.Builder()
                .disable(TemplateType.ENTITY)
                .entity("/templates/entity.java")
                .service("/templates/service.java")
                .serviceImpl("/templates/serviceImpl.java")
                .mapper("/templates/mapper.java")
                .mapperXml("/templates/mapper.xml")
                .controller("/templates/controller.java")
                .build();
        // 注入配置
        InjectionConfig ic = new InjectionConfig.Builder()
                .beforeOutputFile((tableInfo, objectMap) -> {
                    System.out.println("tableInfo: " + tableInfo.getEntityName() + " objectMap: " + objectMap.size());
                })
                // 没有自定义配置map对象
                // 没有模板文件
                .build();
        // 策略配置
        StrategyConfig sc = new StrategyConfig.Builder()
                // 策略 开启大写命名
                .enableCapitalMode()
                .enableSkipView()
                // 禁用SQL过滤
                .disableSqlFilter()
                // 表名
                .addInclude(tables)
                // 要移除的表前缀
                .addTablePrefix(prefix)
                // 配置实体策略
                .entityBuilder()
                // 父类
                .superClass(Model.class)
                // 禁用序列化
                .disableSerialVersionUID()
                // 启用链式编程
                .enableChainModel()
                //启用Lombok
                .enableLombok()
                // 启用表字段注解
                .enableTableFieldAnnotation()
                // 乐观锁
                .versionColumnName("version")
                .versionPropertyName("version")
                // 逻辑删除
                .logicDeleteColumnName("del_flag")
                .logicDeletePropertyName("delFlag")
                // 表名驼峰
                .naming(NamingStrategy.underline_to_camel)
                // 列名驼峰命名
                .columnNaming(NamingStrategy.underline_to_camel)
                .idType(IdType.AUTO)
                // 格式化文件名称
                .formatFileName("%sModel")
                // 配置controller 策略
                .controllerBuilder()
                // 设置父类,没有,不配
                // .superClass(BaseController.class)
                // RestController
                .enableRestStyle()
                .formatFileName("%sController")
                // 配置serveice 策略
                .serviceBuilder()
                // BaseRepository impl
                .superServiceClass(BaseRepository.class)
                .superServiceImplClass(BaseRepositoryImpl.class)
                .formatServiceFileName("%sRepository")
                .formatServiceImplFileName("%sRepositoryImpl")
                // 配置mapper策略
                .mapperBuilder()
                // 父类
                .superClass(SuperMapper.class)
                // 启用mapper注解
                .enableMapperAnnotation()
                // 启用 BaseResultMap
                .enableBaseResultMap()
                .enableBaseColumnList()
                .formatMapperFileName("%sMapper")
                .formatXmlFileName("%sMapper")
                .build();
        // 执行生成
        new AutoGenerator(dsb)
                // 全局配置
                .global(gc)
                .packageInfo(pc)
                .injection(ic)
                .strategy(sc)
                .template(tc)
                // 默认VelocityTemplateEngine引擎,改为freemark引擎
                .execute(new FreemarkerTemplateEngine());

    }

    public static class Builder {
        public Builder() {
        }

        private String dbName;
        private String module;
        private String[] prefix;
        private String parentPackage;
        private String dbHostAndPort;
        private String dbUserName;
        private String dbPsw;
        private String[] tables;

        /**
         * 设置数据库名称
         *
         * @param dbName 数据库名称
         * @return
         */
        public Builder setDbName(String dbName) {
            this.dbName = dbName;
            return this;
        }

        /**
         * 设置模块名称
         *
         * @param module 模块名称如 app-env
         * @return
         */
        public Builder setModule(String module) {
            this.module = module;
            return this;
        }

        /**
         * 设置要去除的表前缀
         *
         * @param prefix 要去除的表前缀 如t_;tbl_
         * @return
         */
        public Builder setPrefix(String[] prefix) {
            this.prefix = prefix;
            return this;
        }

        /**
         * 设置父级包名称
         *
         * @param parentPackage 父级包名称 如 appenv
         * @return
         */
        public Builder setParentPackage(String parentPackage) {
            this.parentPackage = parentPackage;
            return this;
        }

        /**
         * 设置数据库host:port
         *
         * @param dbHostAndPort 数据库host:port
         * @return
         */
        public Builder setDbHostAndPort(String dbHostAndPort) {
            this.dbHostAndPort = dbHostAndPort;
            return this;
        }

        /**
         * 设置数据库用户名
         *
         * @param dbUserName 数据库用户名
         * @return
         */
        public Builder setDbUserName(String dbUserName) {
            this.dbUserName = dbUserName;
            return this;
        }

        /**
         * 设置数据库密码
         *
         * @param dbPsw 数据库密码
         * @return
         */
        public Builder setDbPsw(String dbPsw) {
            this.dbPsw = dbPsw;
            return this;
        }

        /**
         * 设置表名称
         *
         * @param tables 数据库表名称数组
         * @return
         */
        public Builder setTables(String[] tables) {
            this.tables = tables;
            return this;
        }

        public MyBatisGenerate build() {
            return new MyBatisGenerate(dbName, module, prefix, parentPackage, dbHostAndPort, dbUserName, dbPsw, tables);
        }
    }

}


使用演示

    public static void main(String[] args) {
        new MyBatisGenerate.Builder()
                .setDbName("test")
                .setModule("")//没有分模块
                .setPrefix(new String[]{""})//没有需要移除的前缀
                .setParentPackage("generate")//当前项目的包名
                .setDbHostAndPort("localhost:3306")
                .setDbUserName("root")
                .setDbPsw("123456")
                .setTables(new String[]{"notice"})
                .build()
                .generate();

        // SpringApplication.run(LearnMybatisPlusGenerateApplication.class, args);
    }

问题 1

生成的model 会没有泛型的标记
例如

@Getter
@Setter
@Accessors(chain = true)
@TableName("user")
@ApiModel(value = "UserModel对象", description = "用户表")
public class UserModel extends Model {
// 这里还需要手动改为 Model
}

问题 2

没有理解 InjectionConfig ic = new InjectionConfig.Builder();
注入配置的用法。

你可能感兴趣的:(Java,java,mybatis-plus,springboot)