快速创建常见的数据模型、CRUD 接口、配置文件等重复性结构

1. 引言:重复性结构代码的痛点

在软件开发中,我们经常需要创建一些结构相似、模式固定的代码,例如:

  • 数据模型(Data Models):定义实体类及其属性、关系映射。
  • CRUD 接口(Create, Read, Update, Delete):为数据模型提供标准的增删改查操作。
  • 配置文件(Configuration Files):如数据库连接、应用设置、路由规则等。
  • DTO/VO 对象:数据传输对象、视图对象。
  • 单元测试模板:针对特定方法或组件的测试代码结构。

手动编写这些代码不仅耗时,而且容易出错,尤其是在项目初期或需要快速迭代时。本文将介绍几种高效创建这些重复性结构的方法和工具。

2. 核心方法与工具

2.1 代码生成器(Code Generators)

代码生成器可以根据模板或元数据(如数据库表结构、API 定义)自动生成代码。

  • MyBatis Generator:根据数据库表生成 MyBatis 的实体类、Mapper 接口和 XML 映射文件。
  • JHipster:一个流行的开发平台,可以快速生成 Spring Boot + Angular/React/Vue 的全栈应用,包括数据模型、CRUD 接口和前端页面。
  • Swagger Codegen:根据 OpenAPI/Swagger 规范生成客户端 SDK、服务器端存根和 API 文档。

2.2 脚手架(Scaffolding)

脚手架工具通过命令行或图形界面,快速创建项目的标准目录结构和基础文件。

  • Spring Initializr:快速创建 Spring Boot 项目,选择依赖后生成包含基础配置的完整项目。
  • Vue CLI / Create React App:前端项目的标准脚手架,一键生成包含构建配置、路由、状态管理等的基础项目。
  • Yeoman:一个通用的脚手架系统,拥有丰富的生成器(Generator)生态,可以生成各种类型的项目结构。

2.3 模板引擎与代码片段(Templates & Snippets)

在 IDE 或编辑器中预定义模板和代码片段,通过快捷键快速插入。

  • IDE 内置模板:如 IntelliJ IDEA 的 File Templates、Live Templates;Visual Studio 的 Code Snippets。
  • 插件扩展:如 VS Code 的 REST Client 可以快速生成 HTTP 请求模板。
  • 自定义片段:几乎所有现代编辑器都支持自定义代码片段(Snippets),可以定义触发词和模板内容。

2.4 低代码/无代码平台(Low-Code/No-Code)

通过可视化拖拽和配置,自动生成后端数据模型、API 和前端界面。

  • 内部平台:许多大公司会构建内部低代码平台,用于快速生成管理后台、报表系统等。
  • 商业平台:如 OutSystems、Mendix、Appian 等。

3. 实战示例:使用 MyBatis Generator 生成数据模型与 Mapper

以下是一个简单的配置示例,展示如何通过 MyBatis Generator 从数据库表生成 Java 实体类和 Mapper。

3.1 配置文件(generatorConfig.xml)
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC
        "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <context id="MySQL" targetRuntime="MyBatis3">
        <jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
                        connectionURL="jdbc:mysql://localhost:3306/my_db"
                        userId="root"
                        password="123456">
        </jdbcConnection>
    &lt;javaModelGenerator targetPackage="com.example.model"
                        targetProject="src/main/java"&gt;
        &lt;property name="enableSubPackages" value="true"/&gt;
        &lt;property name="trimStrings" value="true"/&gt;
    &lt;/javaModelGenerator&gt;
&amp;lt;sqlMapGenerator targetPackage="mapper"
                 targetProject="src/main/resources"&amp;gt;
&amp;lt;/sqlMapGenerator&amp;gt;
&amp;lt;javaClientGenerator type="XMLMAPPER"
targetPackage="com.example.mapper"
targetProject="src/main/java"&amp;gt;
&amp;lt;/javaClientGenerator&amp;gt;
&amp;lt;table tableName="user"&amp;gt;
&amp;lt;generatedKey column="id" sqlStatement="MySql" identity="true"/&amp;gt;
&amp;lt;/table&amp;gt;
&lt;/context&gt;
</generatorConfiguration>
3.2 运行生成命令
bash 复制代码
mvn mybatis-generator:generate
# 或使用独立 jar 包
java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml
3.3 生成结果示例

执行后会自动生成:

  • User.java(实体类,包含 id、username、email 等属性及 getter/setter)
  • UserMapper.java(Mapper 接口,包含基本的 CRUD 方法)
  • UserMapper.xml(SQL 映射文件,包含对应的 SQL 语句)

4. 实战示例:使用 IDE 模板快速创建 Spring Boot REST Controller

在 IntelliJ IDEA 中,可以使用内置的 "Spring Initializr" 创建项目后,通过 "Live Template" 快速生成 REST Controller。

4.1 创建自定义 Live Template

打开 Settings/Preferences → Editor → Live Templates ,添加一个名为 restc 的模板:

java 复制代码
@RestController
@RequestMapping("/api/${ENTITY_NAME}")
public class ${ENTITY_NAME}Controller {
@Autowired
private ${ENTITY_NAME}Service ${ENTITY_NAME_LOWER}Service;
@GetMapping
public List&lt;${ENTITY_NAME}DTO&gt; findAll() {
return ${ENTITY_NAME_LOWER}Service.findAll();
}
@GetMapping("/{id}")
public ${ENTITY_NAME}DTO findById(@PathVariable ${ID_TYPE} id) {
return ${ENTITY_NAME_LOWER}Service.findById(id);
}
@PostMapping
public ${ENTITY_NAME}DTO create(@RequestBody ${ENTITY_NAME}DTO dto) {
return ${ENTITY_NAME_LOWER}Service.create(dto);
}
@PutMapping("/{id}")
public ${ENTITY_NAME}DTO update(@PathVariable ${ID_TYPE} id, @RequestBody ${ENTITY_NAME}DTO dto) {
return ${ENTITY_NAME_LOWER}Service.update(id, dto);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable ${ID_TYPE} id) {
${ENTITY_NAME_LOWER}Service.delete(id);
}
}

定义变量 ENTITY_NAMEENTITY_NAME_LOWERID_TYPE 的表达式和默认值。

4.2 使用模板

在 Java 类文件中输入 restc 后按 Tab 键,IDE 会自动展开模板并提示输入实体名和 ID 类型,快速生成一个完整的 REST Controller 骨架。

5. 最佳实践与注意事项

  • 保持模板的维护性:生成的代码应易于理解和修改,避免过度复杂的魔法逻辑。
  • 版本控制生成代码:对于团队项目,生成的代码也应纳入版本控制,但需清晰区分"生成代码"和"手工代码"。
  • 定制化与扩展:选择支持插件或自定义模板的工具,以适应项目的特殊需求。
  • 避免过度生成:只生成真正需要的、通用的结构,避免生成大量无用或需要大量修改的代码。
  • 文档与培训:确保团队成员了解所使用的生成工具和模板,并知道如何更新它们。

6. 总结

通过代码生成器、脚手架、模板和低代码平台,我们可以将开发人员从重复性的结构代码编写中解放出来,专注于业务逻辑和创新。关键在于选择合适的工具,并建立一套适合团队的高效工作流。

建议从一两个痛点场景开始(如每次新项目都要配一堆 YAML,或每个实体都要写一遍 CRUD),引入自动化工具,逐步积累模板和最佳实践,最终形成团队的"标准操作程序"。

相关推荐
小流苏生1 小时前
这是一篇关于忘记的文章
前端·程序员·ai编程
2601_963771372 小时前
Scaling Podcast RSS Feeds and Audio Streaming on WordPress Servers
前端·windows·php
名字还没想好☜4 小时前
Next.js App Router 数据获取:fetch 缓存、revalidate 与 dynamic 一次讲清
前端
成都渲染101云渲染66668 小时前
如何在3ds Max中实现更快、更高质量的渲染
前端·javascript·人工智能
闲猫10 小时前
Spring AI 对接Deepseek ChatModel 聊天对话
java·前端·spring
自信的未来12 小时前
JSON 工具|Web Worker 工程化打包 + 语法自动修复 + 多语言代码生成实战
java·前端·json
全栈前端老曹12 小时前
【MongoDB】安全与权限管理 —— 用户认证、角色权限、SSL 加密
前端·javascript·数据库·安全·mongodb·nosql·ssl
zhangxingchao13 小时前
AI大模型核心八:从 Agent Skill、长文档 RAG 到知识库更新与训练策略
前端·人工智能·后端
zhangxingchao13 小时前
AI大模型核心七:从 Workflow、RAG、记忆治理到幂等性
前端·人工智能·后端