Mybatis-plus 创建自定义 FreeMarker 模板详细教程

10 篇文章 0 订阅
5 篇文章 0 订阅

FreeMarker 自定义模板官方步骤

网址:https://baomidou.com/reference/new-code-generator-configuration/#%E6%A8%A1%E6%9D%BF%E9%85%8D%E7%BD%AE-templateconfig
在这里插入图片描述
(页面往最下面拉为自定义模板相关内容)

创建自定义FreeMarker 模板及使用步骤

要创建一个自定义的控制器模板并使用它生成代码,可以按照以下步骤操作:

1. 创建自定义 FreeMarker 模板

首先,在项目的 resources 目录下创建一个名为 templates 的文件夹。在该文件夹中,创建一个新的 FreeMarker 模板文件 controller.java.ftl。这是你的自定义控制器模板。

controller.java.ftl 文件中,编写你的模板代码,例如:

package ${packageName}.controller;

import ${packageName}.service.${entity}Service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/${entity}")
public class ${entity}Controller {

    @Autowired
    private ${entity}Service ${entity?uncap_first}Service;

    @GetMapping("/{id}")
    public ${entity} getById(@PathVariable Long id) {
        return ${entity?uncap_first}Service.getById(id);
    }

    // 其他控制器方法...

}

2. 创建自定义的 Freemarker 模板引擎类

创建一个自定义的 Freemarker 模板引擎类 EnhanceFreemarkerTemplateEngine,以支持自定义模板的输出。

import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import org.jetbrains.annotations.NotNull;

import java.io.File;
import java.util.Map;

public class EnhanceFreemarkerTemplateEngine extends FreemarkerTemplateEngine {

    @Override
    protected void outputCustomFile(@NotNull Map<String, String> customFile, @NotNull TableInfo tableInfo, @NotNull Map<String, Object> objectMap) {
        String entityName = tableInfo.getEntityName();
        String otherPath = this.getPathInfo(OutputFile.other);
        customFile.forEach((key, value) -> {
            String fileName = String.format(otherPath + File.separator + entityName + "%s", key);
            this.outputFile(new File(fileName), objectMap, value);
        });
    }
}

3. 配置代码生成器

在你的代码生成器配置中,使用自定义模板生成控制器类。

import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;

public class CodeGenerator {

    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/db_test";
        String username = "root";
        String password = "password";
        String finalProjectPath = "E://Projects/API/user-service";

        FastAutoGenerator.create(url, username, password)
            .globalConfig(builder -> {
                builder.author("abc")
                    .enableSwagger()
                    .fileOverride()
                    .disableOpenDir()
                    .outputDir(finalProjectPath + "/src/main/java");
            })
            .packageConfig(builder -> {
                builder.parent("com.user_service")
                    .entity("entity")
                    .mapper("mapper")
                    .service("service")
                    .serviceImpl("service.impl")
                    .other("controller")
                    .pathInfo(Collections.singletonMap(OutputFile.xml, finalProjectPath + "/src/main/resources/mapper"));
            })
            .injectionConfig(consumer -> {
                Map<String, String> customFile = new HashMap<>();
                customFile.put("Controller.java", "/templates/controller.java.ftl");
                consumer.customFile(customFile);
            })
            .templateEngine(new EnhanceFreemarkerTemplateEngine()) 
            .execute();
    }
}

4. 执行代码生成器

运行你的代码生成器,生成的代码将会包含根据你自定义模板生成的控制器类。

5. 生成的控制器文件示例

生成的控制器文件内容会类似于以下内容:

package com.user_service.controller;

import com.user_service.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@RequestMapping("/User")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getById(@PathVariable Long id) {
        return userService.getById(id);
    }

    // 其他控制器方法...
}

通过这种方式,你可以根据项目需求定制生成控制器类。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Mybatis-Plus 是一个基于 Mybatis 的增强工具,它简化了 Mybatis 的开发流程,提供了很多实用的功能,其中之一就是代码生成器。代码生成器可以根据数据库表结构自动生成实体类、mapper 接口、xml 文件等代码,极大地提高了开发效率。但是,Mybatis-Plus 自动生成的实体类并不一定满足我们的需求,因此我们需要自定义模板来生成我们需要的类。 下面,我将介绍如何使用 Mybatis-Plus 自定义模板生成 dto、vo、convertor。 1. 创建自定义模板 我们需要在 Mybatis-Plus 的代码生成器中创建自定义模板。打开 Mybatis-Plus 的代码生成器,点击“自定义模板”选项卡,然后点击“添加模板”按钮,输入模板名称和文件名,然后点击“保存”按钮。 在模板编辑器中,我们可以使用 FreeMarker 语法来编写模板。下面是一个简单的模板示例,用于生成 dto 类: ``` package ${dtoPackage}; import lombok.Data; @Data public class ${dtoName} { <#list table.columnList as column> private ${column.javaType} ${column.propertyName}; </#list> } ``` 在这个模板中,我们使用 `${}` 占位符来引用变量。`dtoPackage` 和 `dtoName` 变量由代码生成器自动提供,表示生成的 dto 类的包名和类名。`table` 变量表示当前生成的表信息,包含表名、列名、列类型等信息。我们使用 `<#list>` 和 `</#list>` 标签来遍历表的列信息,并生成对应的属性。 2. 配置代码生成器 在使用自定义模板之前,我们需要配置代码生成器。打开 Mybatis-Plus 的代码生成器,点击“全局配置”选项卡,在“自定义配置”中添加以下配置: ``` # dto 模板配置 dto=templates/dto.java.vm dtoOutputDir=src/main/java/${dtoPackage}/ ``` 其中,`dto` 是我们自定义模板的名称,`dtoOutputDir` 是生成的 dto 类的输出目录。我们还可以添加其他自定义模板和输出目录,例如: ``` # vo 模板配置 vo=templates/vo.java.vm voOutputDir=src/main/java/${voPackage}/ # convertor 模板配置 convertor=templates/convertor.java.vm convertorOutputDir=src/main/java/${convertorPackage}/ ``` 3. 生成代码 配置完成后,我们可以点击“执行”按钮来生成代码。代码生成器将根据配置生成实体类、mapper 接口、xml 文件、dto、vo、convertor 等代码。我们只需要将生成的代码复制到项目中即可。 总结 使用 Mybatis-Plus 的代码生成器可以大大提高开发效率,而自定义模板则可以生成我们需要的类。通过自定义模板,我们可以生成 dto、vo、convertor 等常用类,避免手写重复的代码,提高开发效率和代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值