mybatis-plus-generator配合freemaker引擎【最新3.5.6版本,详细代码】

<dependency>  
    <groupId>com.baomidou</groupId>  
    <artifactId>mybatis-plus-generator</artifactId>  
    <version>${mybatisplus.version}</version>  
</dependency>  
<dependency>  
    <groupId>org.freemarker</groupId>  
    <artifactId>freemarker</artifactId>  
    <version>2.3.32</version>  
</dependency>

<properties>  
    <mybatisplus.version>3.5.6</mybatisplus.version>
</properties>

讲清楚如何使用
首先创建生成器对象

FastAutoGenerator.create("url", "username", "password");

FastAutoGenerator的构造器

private FastAutoGenerator(DataSourceConfig.Builder dataSourceConfigBuilder) {  
    this.dataSourceConfigBuilder = dataSourceConfigBuilder;  
    this.globalConfigBuilder = new GlobalConfig.Builder();  
    this.packageConfigBuilder = new PackageConfig.Builder();  
    this.strategyConfigBuilder = new StrategyConfig.Builder();  
    this.injectionConfigBuilder = new InjectionConfig.Builder();  
    this.templateConfigBuilder = new TemplateConfig.Builder();  
}

Custom.Builder() 会返回一份 Custom配置
可通过每种Config进行配置

FastAutoGenerator.create("jdbc:mysql://localhost:3306/database", "root", "root")  
        // 全局配置 可以配置的具体查看 GlobalConfig.Builder
        .globalConfig(builder -> {  
            builder.author("author");  
        })  
		// 包配置
		// 可以配置的项具体可看 PackageConfig.Builder
        .packageConfig((builder) -> builder.parent("parent")  
                .controller("controller")  
                .entity("entity")  
                .service("service")  
                .serviceImpl("serviceImpl"))  
		// 策略配置
		// 可以配置的项具体可看 StrategyConfig.Builder
        .strategyConfig(builder -> {  
            builder.addInclude("t_a","t_b");  
        })  
        // 模板引擎
        .templateEngine(new FreemarkerTemplateEngine())  
        // 执行方法
        .execute();
GlobalConfig.Builder
/**  
 * 全局配置构建  
 *  
 * @author nieqiurong 2020/10/11.  
 * @since 3.5.0  
 */public static class Builder implements IConfigBuilder<GlobalConfig> {  
  
    private final GlobalConfig globalConfig;  
  
    public Builder() {  
        this.globalConfig = new GlobalConfig();  
    }  
  
    /**  
     * 禁止打开输出目录  
     */  
    public Builder disableOpenDir() {  
        this.globalConfig.open = false;  
        return this;  
    }  
  
    /**  
     * 输出目录  
     */  
    public Builder outputDir(@NotNull String outputDir) {  
        this.globalConfig.outputDir = outputDir;  
        return this;  
    }  
  
    /**  
     * 作者  
     */  
    public Builder author(@NotNull String author) {  
        this.globalConfig.author = author;  
        return this;  
    }  
  
    /**  
     * 开启 kotlin 模式  
     */  
    public Builder enableKotlin() {  
        this.globalConfig.kotlin = true;  
        return this;  
    }  
  
    /**  
     * 开启 swagger 模式  
     */  
    public Builder enableSwagger() {  
        this.globalConfig.swagger = true;  
        return this;  
    }  
  
    /**  
     * 开启 springdoc 模式  
     */  
    public Builder enableSpringdoc() {  
        this.globalConfig.springdoc = true;  
        return this;  
    }  
  
    /**  
     * 不生成service接口  
     */  
    public Builder disableServiceInterface() {  
        this.globalConfig.serviceInterface = false;  
        return this;  
    }  
  
    /**  
     * 时间类型对应策略  
     */  
    public Builder dateType(@NotNull DateType dateType) {  
        this.globalConfig.dateType = dateType;  
        return this;  
    }  
  
    /**  
     * 注释日期获取处理  
     * example: () -> LocalDateTime.now().format(DateTimeFormatter.ISO_DATE)  
     *     * @param commentDate 获取注释日期  
     * @return this  
     * @since 3.5.0  
     */    public Builder commentDate(@NotNull Supplier<String> commentDate) {  
        this.globalConfig.commentDate = commentDate;  
        return this;  
    }  
  
    /**  
     * 指定注释日期格式化  
     *  
     * @param pattern 格式  
     * @return this  
     * @since 3.5.0  
     */    public Builder commentDate(@NotNull String pattern) {  
        return commentDate(() -> new SimpleDateFormat(pattern).format(new Date()));  
    }  
  
    @Override  
    public GlobalConfig build() {  
        return this.globalConfig;  
    }  
}
PackageConfig.Builder
public static class Builder implements IConfigBuilder<PackageConfig> {  
  
    private final PackageConfig packageConfig;  
  
    public Builder() {  
        this.packageConfig = new PackageConfig();  
    }  
  
    public Builder(@NotNull String parent, @NotNull String moduleName) {  
        this();  
        this.packageConfig.parent = parent;  
        this.packageConfig.moduleName = moduleName;  
    }  
  
    /**  
     * 指定父包名  
     *  
     * @param parent 父包名  
     * @return this  
     */    public Builder parent(@NotNull String parent) {  
        this.packageConfig.parent = parent;  
        return this;  
    }  
  
    /**  
     * 指定模块名称  
     *  
     * @param moduleName 模块名  
     * @return this  
     */    public Builder moduleName(@NotNull String moduleName) {  
        this.packageConfig.moduleName = moduleName;  
        return this;  
    }  
  
    /**  
     * 指定实体包名  
     *  
     * @param entity 实体包名  
     * @return this  
     */    public Builder entity(@NotNull String entity) {  
        this.packageConfig.entity = entity;  
        return this;  
    }  
  
    /**  
     * 指定service接口包名  
     *  
     * @param service service包名  
     * @return this  
     */    public Builder service(@NotNull String service) {  
        this.packageConfig.service = service;  
        return this;  
    }  
  
    /**  
     * service实现类包名  
     *  
     * @param serviceImpl service实现类包名  
     * @return this  
     */    public Builder serviceImpl(@NotNull String serviceImpl) {  
        this.packageConfig.serviceImpl = serviceImpl;  
        return this;  
    }  
  
    /**  
     * 指定mapper接口包名  
     *  
     * @param mapper mapper包名  
     * @return this  
     */    public Builder mapper(@NotNull String mapper) {  
        this.packageConfig.mapper = mapper;  
        return this;  
    }  
  
    /**  
     * 指定xml包名  
     *  
     * @param xml xml包名  
     * @return this  
     */    public Builder xml(@NotNull String xml) {  
        this.packageConfig.xml = xml;  
        return this;  
    }  
  
    /**  
     * 指定控制器包名  
     *  
     * @param controller 控制器包名  
     * @return this  
     */    public Builder controller(@NotNull String controller) {  
        this.packageConfig.controller = controller;  
        return this;  
    }  
  
    /**  
     * 路径配置信息  
     *  
     * @param pathInfo 路径配置信息  
     * @return this  
     */    public Builder pathInfo(@NotNull Map<OutputFile, String> pathInfo) {  
        this.packageConfig.pathInfo = pathInfo;  
        return this;  
    }  
  
    /**  
     * 连接父子包名  
     *  
     * @param subPackage 子包名  
     * @return 连接后的包名  
     */  
    @NotNull  
    public String joinPackage(@NotNull String subPackage) {  
        return this.packageConfig.joinPackage(subPackage);  
    }  
  
    /**  
     * 构建包配置对象  
     * <p>当指定{@link #parent(String)} 与 {@link #moduleName(String)}时,其他模块名字会加上这两个作为前缀</p>  
     * <p>  
     * 例如:  
     * <p>当设置 {@link #parent(String)},那么entity的配置为 {@link #getParent()}.{@link #getEntity()}</p>  
     * <p>当设置 {@link #parent(String)}与{@link #moduleName(String)},那么entity的配置为 {@link #getParent()}.{@link #getModuleName()}.{@link #getEntity()} </p>  
     * </p>  
     *  
     * @return 包配置对象  
     */  
    @Override  
    public PackageConfig build() {  
        return this.packageConfig;  
    }  
}
StrategyConfig.Builder
/**  
 * 策略配置构建者  
 *  
 * @author nieqiurong 2020/10/11.  
 * @since 3.5.0  
 */public static class Builder extends BaseBuilder {  
  
    private final StrategyConfig strategyConfig;  
  
    public Builder() {  
        super(new StrategyConfig());  
        strategyConfig = super.build();  
    }  
  
    /**  
     * 开启大写命名  
     *  
     * @return this  
     * @since 3.5.0  
     */    public Builder enableCapitalMode() {  
        this.strategyConfig.isCapitalMode = true;  
        return this;  
    }  
  
    /**  
     * 开启跳过视图  
     *  
     * @return this  
     * @since 3.5.0  
     */    public Builder enableSkipView() {  
        this.strategyConfig.skipView = true;  
        return this;  
    }  
  
    /**  
     * 禁用sql过滤  
     *  
     * @return this  
     * @since 3.5.0  
     */    public Builder disableSqlFilter() {  
        this.strategyConfig.enableSqlFilter = false;  
        return this;  
    }  
  
    /**  
     * 启用 schema  
     *     * @return this  
     * @since 3.5.1  
     */    public Builder enableSchema() {  
        this.strategyConfig.enableSchema = true;  
        return this;  
    }  
  
    /**  
     * 增加过滤表前缀  
     *  
     * @param tablePrefix 过滤表前缀  
     * @return this  
     * @since 3.5.0  
     */    public Builder addTablePrefix(@NotNull String... tablePrefix) {  
        return addTablePrefix(Arrays.asList(tablePrefix));  
    }  
  
    public Builder addTablePrefix(@NotNull List<String> tablePrefixList) {  
        this.strategyConfig.tablePrefix.addAll(tablePrefixList);  
        return this;  
    }  
  
    /**  
     * 增加过滤表后缀  
     *  
     * @param tableSuffix 过滤表后缀  
     * @return this  
     * @since 3.5.1  
     */    public Builder addTableSuffix(String... tableSuffix) {  
        return addTableSuffix(Arrays.asList(tableSuffix));  
    }  
  
    public Builder addTableSuffix(@NotNull List<String> tableSuffixList) {  
        this.strategyConfig.tableSuffix.addAll(tableSuffixList);  
        return this;  
    }  
  
    /**  
     * 增加过滤字段前缀  
     *  
     * @param fieldPrefix 过滤字段前缀  
     * @return this  
     * @since 3.5.0  
     */    public Builder addFieldPrefix(@NotNull String... fieldPrefix) {  
        return addFieldPrefix(Arrays.asList(fieldPrefix));  
    }  
  
    public Builder addFieldPrefix(@NotNull List<String> fieldPrefix) {  
        this.strategyConfig.fieldPrefix.addAll(fieldPrefix);  
        return this;  
    }  
  
    /**  
     * 增加过滤字段后缀  
     *  
     * @param fieldSuffix 过滤字段后缀  
     * @return this  
     * @since 3.5.1  
     */    public Builder addFieldSuffix(@NotNull String... fieldSuffix) {  
        return addFieldSuffix(Arrays.asList(fieldSuffix));  
    }  
  
    public Builder addFieldSuffix(@NotNull List<String> fieldSuffixList) {  
        this.strategyConfig.fieldSuffix.addAll(fieldSuffixList);  
        return this;  
    }  
  
    /**  
     * 增加包含的表名  
     *  
     * @param include 包含表  
     * @return this  
     * @since 3.5.0  
     */    public Builder addInclude(@NotNull String... include) {  
        this.strategyConfig.include.addAll(Arrays.asList(include));  
        return this;  
    }  
  
    public Builder addInclude(@NotNull List<String> includes) {  
        this.strategyConfig.include.addAll(includes);  
        return this;  
    }  
  
    public Builder addInclude(@NotNull String include) {  
        this.strategyConfig.include.addAll(Arrays.asList(include.split(",")));  
        return this;  
    }  
  
    /**  
     * 增加排除表  
     *  
     * @param exclude 排除表  
     * @return this  
     * @since 3.5.0  
     */    public Builder addExclude(@NotNull String... exclude) {  
        return addExclude(Arrays.asList(exclude));  
    }  
  
    public Builder addExclude(@NotNull List<String> excludeList) {  
        this.strategyConfig.exclude.addAll(excludeList);  
        return this;  
    }  
  
    /**  
     * 包含表名  
     *  
     * @return this  
     */    public Builder likeTable(@NotNull LikeTable likeTable) {  
        this.strategyConfig.likeTable = likeTable;  
        return this;  
    }  
  
    /**  
     * 不包含表名  
     *  
     * @return this  
     */    public Builder notLikeTable(@NotNull LikeTable notLikeTable) {  
        this.strategyConfig.notLikeTable = notLikeTable;  
        return this;  
    }  
  
    /**  
     * 输出文件处理  
     *  
     * @return this  
     */    public Builder outputFile(@NotNull IOutputFile outputFile) {  
        this.strategyConfig.outputFile = outputFile;  
        return this;  
    }  
  
    @Override  
    @NotNull    public StrategyConfig build() {  
        this.strategyConfig.validate();  
        return strategyConfig;  
    }  
}

使用案例
使用默认模板生成

    public static void interactiveGenerate() {
        String finalProjectPath = "D:/项目/PersonalProject/MallManagement/MallMServer/server";
        String finalMiddlePath = "/src/main/java";
        
        FastAutoGenerator.create(new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/mallmserver", "root", "ROOTroot123!"))
        // 全局配置
        .globalConfig((builder) -> builder.author("y").outputDir(finalProjectPath + finalMiddlePath))
        // 包配置
        .packageConfig((builder) -> builder.parent("com.mallmserver")
                .pathInfo(Collections.singletonMap(OutputFile.xml, "D:\\项目\\PersonalProject\\MallManagement\\MallMServer\\server\\src\\main\\resources\\mapper"))
        )
        // 策略配置
        .strategyConfig((builder) -> builder.addInclude("mallmshop_keywords").build()
                .controllerBuilder().enableRestStyle().enableFileOverride().build()
                .entityBuilder().convertFileName((name)-> name + "Entity").enableLombok().build()
                .serviceBuilder().build()
        )
        .templateEngine(new FreemarkerTemplateEngine())
        .execute();
    }

使用自定义模板生成

        String finalProjectPath = "D:/项目/PersonalProject/MallManagement/MallMServer/server";
        String finalMiddlePath = "/src/main/java";

        FastAutoGenerator.create(new DataSourceConfig.Builder("jdbc:mysql://localhost:3306/mallmserver", "root", "ROOTroot123!"))
            // 全局配置
            .globalConfig((builder) -> builder.author("y").outputDir(finalProjectPath + finalMiddlePath))
            // 包配置
            .packageConfig((builder) -> builder.parent("com.mallmserver")
                    .pathInfo(Collections.singletonMap(OutputFile.xml, "D:\\项目\\PersonalProject\\MallManagement\\MallMServer\\server\\src\\main\\resources\\mapper"))
            )
            // 策略配置
            .strategyConfig((builder) -> builder.addInclude("mallmshop_keywords")
                    .build()
            )
            .templateEngine(new FreemarkerTemplateEngine())
            .injectionConfig(consumer -> {
                List<CustomFile> customFile = new ArrayList<>();
                // DTO
                customFile.add(new CustomFile.Builder().packageName("entity").filePath(finalProjectPath + finalMiddlePath + "\\com\\mallmserver").fileName("Entity.java").templatePath("/templates/entity.java.ftl").enableFileOverride().formatNameFunction(TableInfo::getEntityName).build());
                consumer.customFile(customFile);
            })
            .execute();
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值