mybatis plus 自动生成代码 自定义输出配置

2020-06-12  本文已影响0人  Willa王

上篇文章配置了基本的mybatis plus自动生成的代码,输出的文件地址是程序默认指定的,那么如果我们想让生成某类文件到指定文件夹下该如何进行配置呢?

模板说明:.vm为velocity引擎的,.ftl为freemarker引擎的

代码配置:
        /*
         * 1. 如果.xml文件是生成到Mapper类下面的xml文件夹下,这个配置不需要,如果配置了则不生成.xml文件了
         * 2. 如果.xml文件不是默认生成到Mapper类下面的xml文件夹下,而是指定到某个路径下,
         *      则该配置需要配置tc.setXml(null),如果不配置则Mapper类下面的xml文件夹下还会同时生成一份默认的。
         */
        TemplateConfig tc = new TemplateConfig();
        tc.setXml(null);// 这个标注了则则不再默认路径下生成XML文件了
//        tc.setMapper(null);// 这个标注则不再默认路径下生成%sMapper.java文件了
        generator.setTemplate(tc);

        // 注入配置, 该配置不在代码中配置出来的话,则生该自动生成的文件不会生成对应的文件!!!!
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        // 自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 获取目录地址
        String projectPath = System.getProperty("user.dir");
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 + pc.getModuleName()
                if(StringUtils.isEmpty(pc.getModuleName())){
                    return projectPath + "/src/main/resources/mapper/" + tableInfo.getXmlName() + StringPool.DOT_XML;
                } else {
                    return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getXmlName() + StringPool.DOT_XML;
                }
            }
        });
        /*
         * 目前这里只配置了xml文件的生成地址,如果需要指定其他文件的生成地址可以继续配置多个Java模板,到指定路径下
         */
//        focList.add(new FileOutConfig("/templates/mapper.java.ftl") {
//            @Override
//            public String outputFile(TableInfo tableInfo) {
//                // 自定义输出文件名 + pc.getModuleName()
//                if(StringUtils.isEmpty(pc.getModuleName())){
//                    return projectPath + "/src/main/java/xx/flower/mapper/" + tableInfo.getMapperName() + StringPool.DOT_JAVA;
//                } else {
//                    return projectPath + "/src/main/java/xx/flower/mapper/" + pc.getModuleName() + "/" + tableInfo.getMapperName() + StringPool.DOT_JAVA;
//                }
//            }
//        });
        cfg.setFileOutConfigList(focList);
        generator.setCfg(cfg);

代码说明:

如果需要将生成的文件指定到某个文件下生成则可以按照如上代码编写,其中:

  • GlobalConfig(全局配置)
  • DataSourceConfig(数据库)
  • PackageConfig(包配置)
  • StrategyConfig(策略配置)
  • FreemarkerTemplateEngine则需要编写对应的.ftl的模板;依赖:
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.28</version>
</dependency>
  • VelocityTemplateEngine则需要编写对应的.vm的模板,依赖:
<dependency>
   <groupId>org.apache.velocity</groupId>
   <artifactId>velocity-engine-core</artifactId>
   <version>2.2</version>
</dependency>

生成示例:
指定%sMapper.java和%sMapper.xml文件.png
引用文档:

上篇文档
mybatis-plus自定义代码模板
使用mybatis-plus逆向工程生成controller、service、mapper及XML文件,让代码更简洁

上一篇 下一篇

猜你喜欢

热点阅读