Comment From: cheng-qiang

比如controller 在一个目录下,service在另外一个目录,以此类推,现在是能在同一个目录下不同包下,我看默认配置了全局目录,能否把这个配置关闭掉,然后.pathInfo(Collections.singletonMap(OutputFile.entity,..........自定义输出地址,否则只能在同一个目录下,这样自定义输出地址会失效,是不是不合理。

Comment From: qclucky7

这种需求的话感觉用双亲委派机制可以在当前类路径下覆盖AbstractTemplateEngine这个类, 重写它输入目录位置就行了。

https://github.com/baomidou/mybatis-plus/blob/820507fcf33db3d94046706a9b731e71a4c58398/mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/engine/AbstractTemplateEngine.java#L46

我使用高版本它代码生成器自定义文件输出也会多拼接实体,我暂时重写的这个类解决的。

Comment From: cheng-qiang

使用的这个版本:

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.4.3.3</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.5.3</version>
</dependency>

自动生成配置:

package com.yiwannuofulasi.config;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import org.apache.ibatis.annotations.Mapper;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class GeneratorConfig {
    public static void main(String[] args) {
        List<String> tables = new ArrayList<>();
        tables.add("oauth_client_details");
        FastAutoGenerator.create("jdbc:mysql://127.0.0.1:3306/ddd-cola-anatomy?characterEncoding=UTF-8&useSSL=true&rewriteBatchedStatements=true&serverTimezone=Asia/Shanghai","root","root")
                .globalConfig(builder -> builder.author("坚持是一种技术")
                        .outputDir(System.getProperty("user.dir")+"\\ddd-cola-anatomy\\ddd-infrastructure\\src\\main\\java")
                        .enableSwagger()
                        .commentDate("yyyy-MM-dd"))
                .packageConfig(builder -> builder.parent("com.yiwannuofulasi")
                        .moduleName("oauth")
                        .entity("entity")
                        .mapper("mapper")
                        .xml("mapper")
                        .pathInfo(Collections.singletonMap(OutputFile.xml,
                                System.getProperty("user.dir")+"\\ddd-cola-anatomy\\ddd-infrastructure\\src\\main\\java\\com\\yiwannuofulasi\\oauth\\mapper")))
                .strategyConfig(builder -> {
                    builder.addInclude(tables)
                            .serviceBuilder()
                            .formatServiceFileName("%sService")
                            .formatServiceImplFileName("%sServiceImpl")
                            .entityBuilder()
                            .enableFileOverride()
                            .enableLombok()
                            .logicDeleteColumnName("deleted")
                            .enableTableFieldAnnotation()
                            .controllerBuilder()
                            .enableHyphenStyle()
                            .formatFileName("%sController")
                            .enableRestStyle()
                            .mapperBuilder()
                            .enableBaseResultMap()
                            .superClass(BaseMapper.class)
                            .formatMapperFileName("%sMapper")
                            .formatXmlFileName("%sMapper")
                            .mapperAnnotation(Mapper.class)
                            .enableFileOverride();
                })
                .templateConfig(builder -> {
                    builder.entity("templates/CustomizedEntity.java");
                })
                .templateEngine(new FreemarkerTemplateEngine())
                .templateConfig(builder -> builder.controller(""))
                .execute();
    }
}

需求效果

MyBatis-Plus 代码生成器自定义输出文件目录,是否支持目录跨包输出?

Comment From: qmdx

请关注 3.5.3.2 版本发布 https://github.com/baomidou/mybatis-plus/commit/8734845fe352d6c179a422c805fdf62e49f6c2af 支持如下

public void testOutputFile() {
    AutoGenerator generator = new AutoGenerator(DATA_SOURCE_CONFIG);
    generator.strategy(strategyConfig().outputFile(((filePath, outputFile) -> {
        File file = new File(filePath);
        if(outputFile == OutputFile.controller) {
            // 调整输出路径为当前目录
            return new File("." + File.separator + file.getName());
        }
        return file;
    })).build());
    generator.execute();
}