MybatisPlus代码生成器

616 阅读1分钟

描述

通过freemarker模板引擎,mybatis-plus自动生成简单的增删改查三层架构。有两套代码生成器,根据mybatis-plus-generator版本分,其中3.5.1及其以上版本使用新版,以下版本使用旧版

maven依赖

<!-- mybatis-plus -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-boot-starter</artifactId>
  <version>3.5.2</version>
</dependency>
<!-- mybatis-plus代码生成器 -->
<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-generator</artifactId>
  <version>3.5.2</version>
</dependency>
<!-- freemarker模板引擎 -->
<dependency>
  <groupId>org.freemarker</groupId>
  <artifactId>freemarker</artifactId>
</dependency>

旧版-代码生成器

@RunWith(SpringRunner.class)
@SpringBootTest
public class GeneratorTest {


    /**
     * 表名
     */
    private static final String tableName = "system_user,system_menu,system_role,system_role_menu_interface,system_user_role,system_interface";
    /**
     * 表前缀
     */
    private static final String tablePrefix = "system";
    /**
     * 模块包名,会生成包名,并且会在controller层的url自动添加前缀
     */
    private static final String moduleName = "";
    /**
     * 作者
     */
    private static final String author = "苦瓜不苦";
    /**
     * mysql
     */
    private static final String url = "jdbc:mysql://localhost:3306/wheel?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&serverTimezone=GMT%2b8";
    private static final String username = "root";
    private static final String password = "root";
    /**
     * 上级包名
     */
    private static final String parentPackName = "org.example";


    /**
     * 自动生成模板
     */
    @Test
    public void test() {

        AutoGenerator generator = new AutoGenerator();

        // 全局配置
        GlobalConfig global = new GlobalConfig();
        String path = System.getProperty("user.dir");
        global.setOutputDir(path + "/src/main/java");
        global.setAuthor(author);
        global.setOpen(false);
        global.setIdType(IdType.ASSIGN_ID);
        global.setServiceName("%sService");
        global.setServiceImplName("%sServiceImpl");
        generator.setGlobalConfig(global);

        // 数据源配置
        DataSourceConfig source = new DataSourceConfig();
        source.setUrl(url);
        source.setDriverName("com.mysql.cj.jdbc.Driver");
        source.setUsername(username);
        source.setPassword(password);
        generator.setDataSource(source);

        // 包配置
        PackageConfig pack = new PackageConfig();
        pack.setModuleName(moduleName);
        pack.setParent(parentPackName);
        generator.setPackageInfo(pack);


        // 自定义配置
        InjectionConfig injection = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        // 模板引擎freemarker
        String freemarkerTemplates = "/templates/mapper.xml.ftl";
        // 模板引擎velocity
        String velocityTemplates = "/templates/repository.xml.vm";

        // 自定义输出配置
        List<FileOutConfig> fileOutList = new ArrayList<>();
        fileOutList.add(new FileOutConfig(freemarkerTemplates) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名,如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return path + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        injection.setFileOutConfigList(fileOutList);
        generator.setCfg(injection);


        // 模板配置
        TemplateConfig template = new TemplateConfig();
        template.setXml(null);
        generator.setTemplate(template);

        // 策略配置,数据库表配置
        StrategyConfig strategy = new StrategyConfig();
        // 映射到实体类命名策略
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 映射到实体字段名命名策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 自定义继承entity类,生成实体类时继承entity
        strategy.setSuperEntityClass(ParentModel.class);
        // 排除公共实体字段
        strategy.setSuperEntityColumns("create_id", "create_name", "create_time", "update_id", "update_name", "update_time");
        // 实体是否为lombok模型
        strategy.setEntityLombokModel(true);
        // 生成@RestController控制器
        strategy.setRestControllerStyle(true);
        // 表名
        strategy.setInclude(tableName.split(","));
        // 是否生成实体时,生成字段注解 默认false;
        strategy.setEntityTableFieldAnnotationEnable(true);
        // 驼峰转连字符
        strategy.setControllerMappingHyphenStyle(true);
        // 表前缀
        // strategy.setTablePrefix(tablePrefix);
        generator.setStrategy(strategy);

        // 在代码生成器主类上配置模板引擎
        generator.setTemplateEngine(new FreemarkerTemplateEngine());
        //生成
        generator.execute();
    }



}

新版-代码生成器

/**
 * @author: 苦瓜不苦
 * @date: 2022/6/18 17:14
 **/
public class GeneratorTest {


    private final static String url = "jdbc:mysql://127.0.0.1:3306/blogger?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC&serverTimezone=GMT%2b8";
    private final static String username = "root";
    private final static String password = "root";
    private final static String[] tableList = {"tb_role_path"};
    private final static String parentPack = "org.example";


    @Test
    void test() {

        String property = System.getProperty("user.dir");

        FastAutoGenerator.create(url, username, password)
                .globalConfig(builder -> {
                    builder.author("苦瓜不苦") // 设置作者
                            .disableOpenDir()   // 关闭自动开发文件资源管理
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(property + "/src/main/java") // 指定输出目录
                            .build();
                })
                .packageConfig(builder -> {
                    builder.parent(parentPack) // 设置父包名
                            //.moduleName("") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, property + "/src/main/resources/mapper/"))  // 设置mapperXml生成路径
                            .build();
                })
                .strategyConfig(builder -> {
                    builder.addInclude(tableList) // 设置需要生成的表名
                            .addTablePrefix("tb_") // 设置过滤表前缀
                            .build()
                            .entityBuilder()    // entity
                            .superClass(ParentModel.class)
                            .enableLombok()
                            .enableTableFieldAnnotation()
                            .addIgnoreColumns("update_time", "update_id", "update_name", "create_time", "create_id", "create_name")
                            .idType(IdType.ASSIGN_ID)
                            .build()
                            .controllerBuilder()    // controller
                            .enableRestStyle()
                            .mapperBuilder()    // mapper
                            .enableMapperAnnotation()
                            .build()
                            .serviceBuilder()   // service
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImp")
                            .build();
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }

}