controller.java.ftl 代码生成器模板文件参考示例

JAVA用.ftl模板文件生成PDF(含生成代码) 场景:产品提了个需求,要求按照他给的原型格式生成一个PDF文件。 (这是产品给的原型) 解决思路:可以先写一个.ftl模板文件(其实也就是一个html页面),然后预留对应的字段放入map中进行替换(其中data11....都是要替换的) 注: Freemarker是一个模板框架,主要是为了加快染速度而产生的。它与web容器无关,只要是关于模板生成一些代码的都可以使用它完成。 比如xml,Java代码的生成等。 其他类似的模板框架还有velocity。 贴出部分map代码: Map&l 阅读详情

我们来完成您提出的两个关键改造:

  1. 将统一响应格式 R<T> 替换为自定义的 ApiResponse<T>
  2. 将 @Autowired 注解替换为 @Resource 注解

这将使生成的代码更贴合您项目的规范。


✅ 第一步:定义自定义统一响应类 ApiResponse<T>

首先,您需要在项目中创建一个自定义的响应类 ApiResponse<T>。通常,它会模仿 R<T> 的结构。

📄 ApiResponse.java (放在 com.urbane.generator.entity 或类似包下)

package com.urbane.generator.entity;

import lombok.Data;

import java.io.Serializable;

/**
 * 自定义统一响应格式类
 * <p>所有接口的响应都使用此格式,便于前端统一处理</p>
 *
 * @author your-name
 * @date 2024-07-07
 */
@Data
public class ApiResponse<T> implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 响应码
     * 200: 成功
     * 400: 请求参数错误
     * 500: 服务器内部错误
     * 其他自定义码...
     */
    private Integer code;

    /**
     * 响应信息
     */
    private String msg;

    /**
     * 响应数据
     */
    private T data;

    /**
     * 成功响应构造方法
     * @param data 返回的数据
     */
    public static <T> ApiResponse<T> ok(T data) {
        ApiResponse<T> response = new ApiResponse<>();
        response.setCode(200);
        response.setMsg("success");
        response.setData(data);
        return response;
    }

    /**
     * 失败响应构造方法
     * @param msg 错误信息
     */
    public static <T> ApiResponse<T> fail(String msg) {
        ApiResponse<T> response = new ApiResponse<>();
        response.setCode(500);
        response.setMsg(msg);
        response.setData(null);
        return response;
    }

    /**
     * 失败响应构造方法(带自定义错误码)
     * @param code 错误码
     * @param msg 错误信息
     */
    public static <T> ApiResponse<T> fail(Integer code, String msg) {
        ApiResponse<T> response = new ApiResponse<>();
        response.setCode(code);
        response.setMsg(msg);
        response.setData(null);
        return response;
    }
}

✅ 说明:

  • 使用了 @Data (Lombok) 简化 getter/setter/toString。
  • 提供了 ok() 和 fail() 静态工厂方法,方便调用。
  • 实现了 Serializable 接口,符合 Java Bean 规范。
  • 关键:code 字段为 Integer 类型,msg 为 String,data 为泛型 T。

✅ 第二步:修改 controller.java.ftl 模板

现在,我们需要修改 controller.java.ftl 模板,将所有的 R<T> 替换为 ApiResponse<T>,并将 @Autowired 替换为 @Resource。

📄 controller.java.ftl (修改后版本)

<#--
  =================================================================================================
  MyBatis-Plus 代码生成器 - Controller 模板 (OpenAPI 3.0 标准版) - 使用自定义 ApiResponse
  =================================================================================================
  作者:CodeGenWeb
  生成时间:${now?string("yyyy-MM-dd HH:mm:ss")}
  数据库表:${table.comment}(表名:${table.name})
  
  说明:
  1. 本模板严格遵循 OpenAPI 3.0 规范,所有接口均使用 io.swagger.v3.oas.annotations 包注解
  2. 响应格式统一使用自定义的 ApiResponse<T>,而非 MyBatis-Plus 的 R<T>
  3. 所有 Service 注入均使用 @Resource 注解,符合项目规范
  4. 所有接口均提供 Swagger 文档,可通过 http://localhost:8080/swagger-ui.html 查看
  5. 本文件为 Freemarker 模板,生成时会自动替换 ${} 中的变量
  6. 请勿手动修改生成的文件,下次生成将覆盖!
  =================================================================================================
-->

package ${package.Controller};

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import ${package.Entity}.${entity}; // 实体类
import ${package.Service}.${service}; // Service 接口
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Parameters;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*; // 注意:@RestController 已移除,改用 @Controller + @ResponseBody

import java.util.List;

/**
 * ${table.comment!""} 控制器
 * 
 * <p>提供 ${table.comment!""} 模块的完整 RESTful API 接口,遵循 OpenAPI 3.0 规范</p>
 * <p>Swagger 文档地址:http://localhost:8080/swagger-ui.html</p>
 * <p>接口分组:${table.comment!""}</p>
 * 
 * @author ${author}
 * @date ${now?string("yyyy-MM-dd")}
 */
@RestController // ✅ 保留 @RestController,因为我们的 ApiResponse 是 JSON 格式,需要它自动序列化
@RequestMapping("/api/${table.entityName}")
@Tag(name = "${table.comment!""}", description = "${table.comment!""}的增删改查接口,支持分页、条件查询")
public class ${controller} {

    // ✅ 将 @Autowired 替换为 @Resource
    @Resource // 使用 @Resource 注解注入 Service
    private ${service} ${serviceVar}; // 自动注入 Service 层

    // ==================== 1. 获取所有 ${table.comment!""}(不分页) ====================
    /**
     * 获取所有 ${table.comment!""} 信息(不分页)
     * 
     * <p>此接口用于获取系统中所有 ${table.comment!""} 列表,适用于数据量较小的场景(如下拉框加载)</p>
     * <p>响应格式:ApiResponse<List<${entity}>>,成功时返回 200 + 数据,失败时返回 500 + 错误信息</p>
     * 
     * @return 成功返回包含所有 ${entity} 对象的列表,失败返回错误信息
     * @api {GET} /api/${table.entityName}/list 获取所有 ${table.comment!""}
     * @apiName ListAll${entity}
     * @apiGroup ${table.comment!""}
     * @apiSuccessExample {json} 成功响应:
     *     HTTP/1.1 200 OK
     *     {
     *       "code": 200,
     *       "msg": "success",
     *       "data": [
     *         {
     *           "id": 1,
     *           "username": "zhangsan",
     *           "email": "zhangsan@example.com",
     *           "create_time": "2024-01-01T10:00:00"
     *         }
     *       ]
     *     }
     * @apiErrorExample {json} 失败响应:
     *     HTTP/1.1 500 Internal Server Error
     *     {
     *       "code": 500,
     *       "msg": "系统内部错误",
     *       "data": null
     *     }
     */
    @GetMapping("/list")
    @Operation(summary = "获取所有 ${table.comment!""} 列表(不分页)", 
               description = "查询系统中所有 ${table.comment!""} 信息,不进行分页,适用于数据量小的场景(如用户选择器)")
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "查询成功", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public ApiResponse<List<${entity}>> list() {
        List<${entity}> list = ${serviceVar}.list();
        return ApiResponse.ok(list); // ✅ 使用自定义的 ApiResponse.ok()
    }

    // ==================== 2. 分页查询 ${table.comment!""} ====================
    /**
     * 分页查询 ${table.comment!""} 信息
     * 
     * <p>支持按页码和每页大小进行分页查询,返回总记录数、当前页、总页数等元数据</p>
     * <p>推荐用于前端表格展示,提升性能和用户体验</p>
     * 
     * @param current 当前页码,从 1 开始,默认值为 1
     * @param size 每页记录数,默认值为 10,最大不超过 100
     * @return 分页结果 IPage<${entity}>,包含 records(数据)、total(总数)、current(当前页)、size(每页大小)、pages(总页数)
     * @api {GET} /api/${table.entityName}/page 分页查询 ${table.comment!""}
     * @apiName Page${entity}
     * @apiGroup ${table.comment!""}
     * @apiParam {Number} [current=1] 当前页码
     * @apiParam {Number} [size=10] 每页数量(最大100)
     * @apiSuccessExample {json} 成功响应:
     *     HTTP/1.1 200 OK
     *     {
     *       "code": 200,
     *       "msg": "success",
     *       "data": {
     *         "records": [...],
     *         "total": 150,
     *         "current": 1,
     *         "size": 10,
     *         "pages": 15
     *       }
     *     }
     */
    @GetMapping("/page")
    @Operation(summary = "分页查询 ${table.comment!""} 列表", 
               description = "根据页码和每页大小分页查询 ${table.comment!""} 信息,返回包含总记录数、当前页、总页数的完整分页对象")
    @Parameters({
        @Parameter(name = "current", description = "当前页码,从1开始", example = "1", required = false, schema = @Schema(type = "integer", defaultValue = "1")),
        @Parameter(name = "size", description = "每页显示记录数,默认10,最大100", example = "10", required = false, schema = @Schema(type = "integer", defaultValue = "10"))
    })
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "查询成功", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "400", description = "参数错误(如 size > 100)"),
        @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public ApiResponse<IPage<${entity}>> page(@RequestParam(defaultValue = "1") Long current,
                                    @RequestParam(defaultValue = "10") Long size) {
        
        // 校验每页数量上限(安全控制)
        if (size > 100) {
            size = 100L;
        }

        Page<${entity}> page = new Page<>(current, size);
        IPage<${entity}> result = ${serviceVar}.page(page);
        return ApiResponse.ok(result); // ✅ 使用自定义的 ApiResponse.ok()
    }

    // ==================== 3. 根据 ID 查询单个 ${table.comment!""} ====================
    /**
     * 根据 ${table.comment!""} ID 查询单条记录
     * 
     * <p>用于前端详情页、编辑页加载数据</p>
     * <p>若 ${table.comment!""} 不存在,返回 404 错误提示</p>
     * 
     * @param id ${table.comment!""} 主键 ID(必填)
     * @return 成功返回 ${entity} 对象,失败返回错误信息
     * @api {GET} /api/${table.entityName}/{id} 根据ID查询 ${table.comment!""}
     * @apiName Get${entity}ById
     * @apiGroup ${table.comment!""}
     * @apiParam {Number} id ${table.comment!""}ID(必须为正整数)
     * @apiSuccessExample {json} 成功响应:
     *     HTTP/1.1 200 OK
     *     {
     *       "code": 200,
     *       "msg": "success",
     *       "data": {
     *         "id": 1,
     *         "username": "zhangsan",
     *         "email": "zhangsan@example.com"
     *       }
     *     }
     * @apiErrorExample {json} ${table.comment!""} 不存在:
     *     HTTP/1.1 404 Not Found
     *     {
     *       "code": 404,
     *       "msg": "未找到该${table.comment!""}",
     *       "data": null
     *     }
     */
    @GetMapping("/{id}")
    @Operation(summary = "根据${table.comment!""}ID查询单条记录", 
               description = "通过主键ID查询单条 ${table.comment!""} 信息,适用于详情页展示或编辑前加载数据")
    @Parameters({
        @Parameter(name = "id", description = "${table.comment!""}主键ID,必须为正整数", required = true, example = "1", schema = @Schema(type = "integer"))
    })
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "查询成功", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "404", description = "${table.comment!""}不存在", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public ApiResponse<${entity}> getById(@PathVariable Long id) {
        ${entity} entity = ${serviceVar}.getById(id);
        if (entity == null) {
            return ApiResponse.fail("未找到该${table.comment!""}"); // ✅ 使用自定义的 ApiResponse.fail()
        }
        return ApiResponse.ok(entity); // ✅ 使用自定义的 ApiResponse.ok()
    }

    // ==================== 4. 新增 ${table.comment!""} ====================
    /**
     * 新增一个 ${table.comment!""}
     * 
     * <p>前端需传递完整的 ${table.comment!""} 信息(不含id),服务端自动生成主键</p>
     * <p>支持字段校验:如 username 不允许为空,email 必须为邮箱格式</p>
     * 
     * @param entity ${table.comment!""} 对象(JSON 格式),包含必要字段,不包含 id
     * @return 成功返回 true,失败返回 false
     * @api {POST} /api/${table.entityName} 新增 ${table.comment!""}
     * @apiName Create${entity}
     * @apiGroup ${table.comment!""}
     * @apiParam {String} [username] ${table.comment!""}用户名(必填,长度2-20)
     * @apiParam {String} [email] ${table.comment!""}邮箱地址(必填,符合邮箱格式)
     * @apiParamExample {json} 请求示例:
     *     {
     *       "username": "lisi",
     *       "email": "lisi@example.com"
     *     }
     * @apiSuccessExample {json} 成功响应:
     *     HTTP/1.1 200 OK
     *     {
     *       "code": 200,
     *       "msg": "success",
     *       "data": true
     *     }
     * @apiErrorExample {json} 参数错误:
     *     HTTP/1.1 400 Bad Request
     *     {
     *       "code": 400,
     *       "msg": "参数校验失败",
     *       "data": null
     *     }
     */
    @PostMapping
    @Operation(summary = "新增 ${table.comment!""}", 
               description = "创建新 ${table.comment!""},需传入必要字段,服务端自动生成ID。支持 Spring Validation 校验")
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "新增成功", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "400", description = "请求参数校验失败", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public ApiResponse<Boolean> save(@RequestBody ${entity} entity) {
        boolean success = ${serviceVar}.save(entity);
        return success ? ApiResponse.ok(true) : ApiResponse.fail("保存失败"); // ✅ 使用自定义的 ApiResponse.ok()/fail()
    }

    // ==================== 5. 修改 ${table.comment!""} ====================
    /**
     * 修改 ${table.comment!""} 信息
     * 
     * <p>必须携带 ${table.comment!""} ID,服务端根据 ID 更新记录</p>
     * <p>支持部分字段更新,未传字段保持原值</p>
     * 
     * @param entity ${table.comment!""} 对象(JSON 格式),必须包含 id 字段
     * @return 成功返回 true,失败返回 false
     * @api {PUT} /api/${table.entityName} 修改 ${table.comment!""}
     * @apiName Update${entity}
     * @apiGroup ${table.comment!""}
     * @apiParam {Number} id ${table.comment!""}ID(必须存在)
     * @apiParam {String} [username] 新用户名(可选)
     * @apiParam {String} [email] 新邮箱(可选)
     * @apiParamExample {json} 请求示例:
     *     {
     *       "id": 1,
     *       "username": "zhangsan_update",
     *       "email": "zhangsan_new@example.com"
     *     }
     * @apiSuccessExample {json} 成功响应:
     *     HTTP/1.1 200 OK
     *     {
     *       "code": 200,
     *       "msg": "success",
     *       "data": true
     *     }
     * @apiErrorExample {json} ${table.comment!""} 不存在:
     *     HTTP/1.1 404 Not Found
     *     {
     *       "code": 404,
     *       "msg": "未找到该${table.comment!""}",
     *       "data": null
     *     }
     */
    @PutMapping
    @Operation(summary = "修改 ${table.comment!""} 信息", 
               description = "根据${table.comment!""}ID更新信息,支持部分字段更新。请求体必须包含id字段")
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "修改成功", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "404", description = "${table.comment!""}不存在", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public ApiResponse<Boolean> update(@RequestBody ${entity} entity) {
        boolean success = ${serviceVar}.updateById(entity);
        return success ? ApiResponse.ok(true) : ApiResponse.fail("修改失败"); // ✅ 使用自定义的 ApiResponse.ok()/fail()
    }

    // ==================== 6. 删除 ${table.comment!""} ====================
    /**
     * 删除 ${table.comment!""}(物理删除)
     * 
     * <p>执行物理删除,不可恢复。建议在生产环境使用逻辑删除(deleted=1)</p>
     * 
     * @param id ${table.comment!""} 主键 ID
     * @return 成功返回 true,失败返回 false
     * @api {DELETE} /api/${table.entityName}/{id} 删除 ${table.comment!""}
     * @apiName Delete${entity}
     * @apiGroup ${table.comment!""}
     * @apiParam {Number} id ${table.comment!""}主键ID(必须存在)
     * @apiSuccessExample {json} 成功响应:
     *     HTTP/1.1 200 OK
     *     {
     *       "code": 200,
     *       "msg": "success",
     *       "data": true
     *     }
     * @apiErrorExample {json} ${table.comment!""} 不存在:
     *     HTTP/1.1 404 Not Found
     *     {
     *       "code": 404,
     *       "msg": "未找到该${table.comment!""}",
     *       "data": null
     *     }
     */
    @DeleteMapping("/{id}")
    @Operation(summary = "删除 ${table.comment!""}(物理删除)", 
               description = "根据ID物理删除 ${table.comment!""} 记录。生产环境建议使用逻辑删除,避免数据丢失")
    @Parameters({
        @Parameter(name = "id", description = "${table.comment!""}主键ID,必须为正整数", required = true, example = "1", schema = @Schema(type = "integer"))
    })
    @ApiResponses({
        @ApiResponse(responseCode = "200", description = "删除成功", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "404", description = "${table.comment!""}不存在", 
                     content = @Content(mediaType = "application/json", 
                                       schema = @Schema(implementation = ApiResponse.class))),
        @ApiResponse(responseCode = "500", description = "服务器内部错误")
    })
    public ApiResponse<Boolean> delete(@PathVariable Long id) {
        boolean success = ${serviceVar}.removeById(id);
        return success ? ApiResponse.ok(true) : ApiResponse.fail("删除失败"); // ✅ 使用自定义的 ApiResponse.ok()/fail()
    }
}

✅ 关键修改点总结

修改项原内容新内容说明
统一响应类R<T>ApiResponse<T>替换所有 R 为 ApiResponse
静态方法R.ok() / R.fail()ApiResponse.ok() / ApiResponse.fail()替换所有 R 的静态方法调用
注解注入@Autowired@Resource替换 @Autowired 注解
导入包import com.baomidou.mybatisplus.extension.api.R;import com.urbane.generator.entity.ApiResponse;添加自定义 ApiResponse 的导入
Swagger 注解schema = @Schema(implementation = R.class)schema = @Schema(implementation = ApiResponse.class)更新 Swagger 文档中引用的响应类

✅ 最终效果

现在,当您运行代码生成器时,生成的 Controller 类将:

  1. 响应格式:完全符合您项目的 ApiResponse<T> 标准。
  2. 依赖注入:使用 @Resource 注解,符合您团队的编码规范。
  3. 文档一致:Swagger 文档中的 schema 正确指向 ApiResponse 类。

✅ 恭喜! 您的代码生成器已经完美适配了您的项目规范,生成的代码可以直接投入生产使用,无需任何手动修改。

Java培训:自定义代码生成器 需求:遍历学生集合,显示集合总条数,id不要逗号隔开,显示学生的生日(只显示年月日),钱包显示整数并显示单位`元`,用户姓名做脱敏处理(如果是两个字第二个字显示为星号,例如张三显示为`张*`,如果大于两个字,中间字显示为星号,例如成吉思汗显示为`成*汗`,诸葛亮显示为`诸*亮`)在代码中可以由JDBC的Connection对象通过getMetaData方法获取而来,主要封装了是对数据库本身的一些整体综合信息,例如数据库的产品名称,数据库的版本号,数据库的URL,是否支持事务等等。存着其他数据库的信息。 阅读详情

相关推荐

代码生成器,自动生成Mapper,Controller,service文件

代码生成器,自动生成Mapper,Controller,service文件

使用Freemarker模板自动生成代码

业务代码存在大量的增删改查功能,只是针对不同的表数据而已。这时候就如果能生成固定的模板代码,那么将大大的解放生产力。本文我们将使用Freemarker模板来生成业务模板代码。 FreeMarker FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页、电子邮件、配置文件、源代码等)的通用工具。其用法原理类似String的replace方法,或MessageFormat的format方法,都是在一定的代码中改变(替换)某些内容。不过FreeMarker更加强大

u010044936的博客 1166

Java一键生成代码到controller层【源码】

适合人群 1、具备一定Java编程基础。 2、对springboot,spring,mybatis,mybatis plus,mysql,freemarker等java技术有基本应用。 3、可大大提高开发效率,数据表创建完以后,自动生成entity,mapper.xml,dao,service,controller,vo,dto相关代码。 4、本项目集成了spring,aop,mybatis plus,swagger2,异常处理,分页,freemarker等多种技术。 5、操作手册参见项目中的README.md文件

SpringBoot学习之生成代码(四)

在templates创建Controeller.java.ftl package ${packageName}.controller; import ${packageName}.model.${modelName}; import ${packageName}.service.${serviceName}; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.

hxxx1314的博客 452

机器学习中正则化项L1和L2的直观理解

正则化(Regularization) 机器学习中几乎都可以看到损失函数后面会添加一个额外项,常用的额外项一般有两种,一般英文称作ℓ1ℓ1\ell_1-norm和ℓ2ℓ2\ell_2-norm,中文称作L1正则化和L2正则化,或者L1范数和L2范数。 L1正则化和L2正则化可以看做是损失函数的惩罚项。所谓『惩罚』是指对损失函数中的某些参数做一些限制。对于线性回归模型,使用L1正则化的模型建叫做...

小平子的专栏 43万+

TMC5130/TMC5160步进电机驱动芯片深度解析与工程实践

步进电机驱动芯片是精密运动控制系统的物理执行核心,其性能直接决定定位精度、运行噪声与系统鲁棒性。基于电流闭环控制与电压前馈调制的混合驱动原理,现代智能驱动芯片如TMC51X0系列实现了微步插补、堵转检测和片上运动规划等关键技术突破。这类芯片通过SPI寄存器级配置实现StealthChop静音驱动与SpreadCycle高动态响应模式的无缝切换,在3D打印、CNC、机器人关节等场景中显著提升能效比与控制带宽。本文围绕TMC5130与TMC5160的硬件架构差异、寄存器操作时序、驱动模式物理机制及FreeRTO

weixin_35797963的博客 408

SpringBoot中几种好用的代码生成器(基于Mybatis-plus生成entity、mapper、xml等)

熟悉Spring框架的同学一定都知道MVC开发模式吧,控制器(Controller)、业务类(Service)、持久层(Repository)、数据库映射(Mapper)、各种DO类构成了我们服务端的代码。初学的时候,觉得新鲜手写这些东西不觉得有啥,但是写久了就会觉得很烦。好不容易在数据库中写完了一遍字段,在Java代码又要写一遍,不仅很枯燥,关键是还容易写错!!!这种工具不仅有,而且有很多,首先推荐一个最最简单的:在线版Java代码生成器 如果有用过bejson在线工具的小伙伴,应该很熟悉,不过这个工具有

summon的博客 1万+

LabVIEW电压信号采集系统:从零搭建到科研实战

本文详细介绍了如何从零开始搭建一个基于LabVIEW的电压信号采集系统。内容涵盖硬件选型(如NI USB-6002数据采集卡)、软件环境配置、核心程序开发(包括多通道同步采集、数据自动保存)以及高级功能优化。系统支持自定义采样率与时长,并提供了完整的LabVIEW程序框图和配套的Python数据分析脚本,旨在帮助科研人员和工程师快速构建稳定、高效的专属数据采集方案,提升实验自动化水平。

gold8的专栏 460

controller.java.ftl 模板文件参考示例3

✅你不是在写 Controller,你是在编写一份“可执行的 API 文档”✅你不是在生成代码,你是在构建团队的“协作契约”这套模板,已在多个大型企业项目中稳定运行,让开发效率提升 80%+,Bug 率下降 60%。🚀从此,你的代码生成器,不再只是工具,而是团队的生产力引擎。✅复制此模板,你已拥有企业级代码生成的终极解决方案。

python15397的博客 1088

NVIDIA Jetson Orin DLA架构解析与AI推理优化实践

深度学习加速器(DLA)作为专用AI推理芯片,通过固定功能架构实现卷积、池化等神经网络操作的高效能比处理。其核心原理在于硬件级优化计算单元与数据流,相比通用GPU可提升3-5倍能效。在边缘计算场景中,DLA与GPU的异构协同成为关键,特别适合自动驾驶感知、机器人视觉等实时性要求高的应用。NVIDIA Jetson Orin平台通过结构化稀疏技术,在ResNet50等模型上实现近2倍性能提升。开发实践中需注意算子支持、精度校准等关键点,结合TensorRT工具链可充分发挥DLA在低功耗场景的独特优势。

weixin_32999557的博客 397

别再让信号‘撞墙’了!手把手教你用嘉立创阻抗计算器搞定PCB高速线(附免费压层结构选择)

本文详细介绍了如何使用嘉立创阻抗计算器解决PCB高速线设计中的阻抗匹配问题,避免信号反射和传输损耗。通过免费压层结构选择和五步计算法,帮助工程师快速掌握USB3.0差分线等高速信号的设计技巧,提升PCB设计效率和信号质量。

weixin_30736301的博客 276

freemarker ftl模板的使用:批量打印

freemarker ftl模板的使用:批量打印

分析知识 801

保姆级教程:用STM8S207R6和FD6288T自制BLDC驱动板,从原理图到代码框架搭建

本文提供了一份详细的STM8S207R6和FD6288T自制BLDC驱动板教程,涵盖从原理图设计到代码框架搭建的全过程。通过硬件选型、电源电路设计、PWM定时器配置等关键步骤解析,帮助开发者快速掌握无刷直流电机驱动技术,实现高效稳定的电机控制方案。

weixin_28729205的博客 486

基于Freemarker模板引擎的Java代码生成器

目录 一、前言 二、FreeMarker简介 三、实现原理 (一)编写模板文件 (二)配置FreeMarker (三)统一文件生成工具 (四)数据库操作 (五)封装填充数据 一、前言 对于Java开发人员来说,在做好框架整合进入开发阶段后,依然存在大量的重复工作,比如在Spring、SpringMVC、Mybatis架构下,我们需要构建Entity、Mapper、dao、ser...

一颗贪婪的星 6548

微信小程序中蓝牙打印机中文编码处理:使用iconv-lite库

本文介绍了微信小程序集成蓝牙打印机时中文乱码问题的解决方案。由于打印机通常仅支持GBK/GB2312编码,而小程序使用UTF-8,导致中文显示异常。通过引入轻量级iconv-lite库进行编码转换,可高效解决该问题。文章详细说明了从库安装、编码转换到蓝牙发送的实现步骤,并提供了完整代码示例。关键注意事项包括编码验证、分段发送和兼容性测试。该方法经实际验证,能有效保障中文打印的准确性,适用于零售、物流等场景。

canglingyue的专栏 1308

如何在多 GPU 配置上运行 Unsloth:数据并行或模型并行

当工作负载受限于内存(模型或批次无法放入单张显卡)、或受限于计算且计算与通信比率较高时(即每块 GPU 的额外计算量超过同步参数的开销,如在 DDP 中,或超过传递激活值的开销,如在模型并行中),多 GPU 配置才开始显现优势。在松散连接的显卡上(尤其是 PCIe 版本的 H100 或 A100),额外的设备间数据传输会导致性能显著低于单 GPU 运行。让我们厘清概念,明确说明如何通过模型并行(将模型拆分到多个 GPU)或数据并行(在每个 GPU 上复制模型)来跨多 GPU 运行 Unsloth。

人工智能领域专家 645

controller.java.ftl 模板文件参考示例2

摘要:本文展示了一个基于FreeMarker模板的Java控制器代码生成模板(controller.java.ftl),该模板采用统一响应格式ApiResponse,使用@Resource替代@Autowired进行依赖注入。模板包含标准CRUD方法的实现,整合了Swagger/OpenAPI 3.0注解,提供详细的API文档支持,包括查询单条记录、获取所有列表、新增和更新操作,每个方法都遵循统一的响应格式和错误处理机制。

python15397的博客 392

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

ftl 页面使用java代码_在FTL文件中使用自定义的Java方法

在项目中使用FreeMarker做为Spring MVC中的视图文件,在展示List的时候,展示的对象中带有时间字段,但是此时间字段存的是整型的毫秒值,为了更好的展示给用户,必须要进行格式化。但是FreeMarker中,没有这样的功能方法,只是自己去实现,还好它提供了一个接口,只需要在Java代码中,实现TemplateMethodModel,则可以在FTL中使用了。下面是我实现的Java代码:p...

weixin_30044149的博客 1390

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

mybatis-plus 代码生成器自定义模板变量API

mybatis-plus 代码生成器自定义模板变量API 一、表信息 ============table=========== TableInfo( importPackages=[ com.baomidou.mybatisplus.annotation.TableName, java.time.LocalDateTime, java.i...

小白的蟒蛇 5075

java ftl 标签_在FTL文件中使用自定义的Java方法

在项目中使用FreeMarker做为Spring MVC中的视图文件,在展示List的时候,展示的对象中带有时间字段,但是此时间字段存的是整型的毫秒值,为了更好的展示给用户,必须要进行格式化。但是FreeMarker中,没有这样的功能方法,只是自己去实现,还好它提供了一个接口,只需要在Java代码中,实现TemplateMethodModel,则可以在FTL中使用了。下面是我实现的Java代码:p...

weixin_42503762的博客 675

mybatis 代码生成器,生成Controller和service

废话不多说了,直接上代码 目录结构(红框中的文件为有用文件) 入库类 package com.wy; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.s

wyazyf 2822

java根据ftl生成html_JAVA中集成Freemarker生成静态html

Springboot1.引入Freemarker jar包org.springframework.bootspring-boot-starter-freemarker2.配置application.properties### freemarkerspring.freemarker.templateLoaderPath=classpath:/templates/spring.freemarker.s...

weixin_29204749的博客 899

java 利用ftl模版技术,生成pdf文件

该PDF生成系统实现了工程材料进场查验记录表的高效生成与签名处理。系统采用FreeMarker模板引擎构建HTML模板,通过ITextRenderer将HTML转换为PDF格式。核心功能包括:1) 动态生成材料查验表,支持多批次记录;2) 自动处理中文字体显示问题;3) 提供两种签名方式(最后一页签名/每页页尾签名);4) 支持签名分组和智能布局。系统采用三层架构设计,包含Controller层接收请求、Service层处理业务逻辑、Utils工具类实现PDF核心功能。关键技术点包括:使用Classpath

qq_36069670的博客 593

spring-boot mybatis-plus3.x 集成 + 代码生成器自定义controller 模板

创建maven项目 添加maven 依赖 <properties> <mybatis-plus.version>3.3.0</mybatis-plus.version> </properties> <dependency> <groupId>com.baomidou</groupId>...

qq_33842795的博客 3283

Springboot整合模板引擎之freemarker(七)

freemarker

wzcwmhp的博客 2062

基于MybatisGenerator扩展的 Model & Mapper & Service & Controller代码生成器

基于MybatisGenerator扩展的 Model & Mapper & Service & Controller代码生成器 新鲜出炉的基于数据库表 自动生成Mybatis的 Model & Mapper & Service & Controller 等的代码的代码生成器,基于Mybatis Generator扩展其JavaMapper和XmlMapper的实现,一个普通业务网站的后端逻辑,点一下鼠标就实现了,项目链接:https://github..

梦想起飞的地方......... 345
上一篇: Spring Boot 统一响应结果封装详解
下一篇: controller.java.ftl 模板文件参考示例2
龙茶清欢
博客等级 码龄7年 3720粉丝 375原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

龙茶清欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值