当前位置: 首页 > news >正文

数据库驱动的代码生成器

前言在我们很多业务开发中最基础也是最需要的就是对数据表进行一些CRUD的功能我们根据表创建model、request、query、controller、service、repository等层但这些又是一些重复的事情既然是重复的事情都可以通过工具进行替代下面以JAVA进行简单讲解。一、技术栈Spring Boot 2.3.6.RELEASE MavenFreeMarker 2.3.26-incubating 模板引擎MySQL 8.x用 JdbcTemplate 查询 information_schemaLombokSpringfox Swagger 3.0API 文档生成的代码依赖Spring Data JPA MapStruct二、项目结构src/main/java/com/example/codegen/ ├── Application.java ├── config/ │ ├── GeneratorConfig.java # 配置接口 │ └── GeneratorConfigImpl.java # 配置实现 ├── controller/ │ └── GeneratorController.java # REST API ├── manager/ │ └── TableMetaManager.java # 数据库元数据读取 ├── model/ │ ├── TableDTO.java # 表名注释 │ ├── TableMetaDTO.java # 完整表元数据 │ ├── ColumnMetaDTO.java # 列元数据 │ └── JavaType.java # Java类型名包名 ├── service/ │ └── GeneratorService.java # 核心生成ZIP打包 └── util/ └── StringUtils.java # snake_case/camelCase 转换 src/main/resources/ ├── application.yml └── templates/ # FreeMarker 模板目录 ├── BaseEntity.java.ftl # 基础框架 ├── BaseRepository.java.ftl ├── Query.java.ftl ├── QueryField.java.ftl ├── QueryType.java.ftl ├── Result.java.ftl ├── BusinessException.java.ftl ├── Entity.java.ftl # 业务代码 ├── Repository.java.ftl ├── Query.java.ftl业务Query与base不同路径 ├── Controller.java.ftl ├── ServiceImpl.java.ftl ├── Request.java.ftl └── Convertor.java.ftl注意base 框架模板和业务模板放在同一个templates/目录下base 模板以Base前缀命名区分。业务 Query 模板可以叫BizQuery.java.ftl或保留原名base 的 Query.java.ftl 和业务的区分开即可。三、REST APIGET /tables列出数据库中所有表返回ListTableDTOtableName tableCommentGET /table/gen参数参数必填说明author是作者名写入生成的类注释tablePrefix否表前缀生成类名时去掉如t_tableNames是表名逗号分隔basePackage是基础包名如com.examplemoduleName是模块名如order返回ZIP 文件下载内含 base 框架类 每表 7 个业务类按包路径组织。四、基础框架模板一些工具类或者公司/集团有对一些实体、查询等内部框架类继续沿用公司/集团风格创建对应的FreeMarker模版下列Base 模板7 个BaseEntity.java.ftl, BaseRepository.java.ftl, QueryType.java.ftl, QueryField.java.ftl, Query.java.ftl, Result.java.ftl, BusinessException.java.ftl业务模板7 个Entity.java.ftl, Repository.java.ftl, BizQuery.java.ftl, ServiceImpl.java.ftl, Controller.java.ftl, Request.java.ftl, Convertor.java.ftl命名避让base 的 Query.java.ftl 和业务的 BizQuery.java.ftl 使用不同文件名GeneratorService 核心逻辑create(author, tablePrefix, tableNames, basePackage, moduleName): 1. 获取 tableSchema从 DataSource.getConnection().getCatalog() 2. 解析 tableNames → ListString 3. 调用 TableMetaManager.getFullTableMeta() 获取表元数据 4. 创建 ByteArrayOutputStream ZipOutputStream 5. 渲染 base 模板数据模型Map.of(basePackage, basePackage) → 追加到 ZIP 6. 渲染业务模板数据模型TableMetaDTO逐表逐模板 → 追加到 ZIP 7. 返回 byte[]FreeMarker 配置classpath 模板路径/templates编码UTF-8异常处理IGNORE_HANDLER不因模板缺少属性而报错
http://www.rkmt.cn/news/1415145.html

相关文章:

  • 大同黄金回收选哪家靠谱 这份五月实测指南给你答案 - 专业黄金回收
  • GLM-5.1大模型:用自然语言生成动态SVG动画代码的技术解析与实践
  • 从点积相似度到注意力权重:深入解析Transformer核心计算流程
  • 中石化加油卡回收一般几折?2026最新面值折扣对照表 - 可可收公众号
  • Ai2Psd:重构AI到PSD的矢量转换工作流
  • 从零构建桌面六轴机械臂:Arduino控制与3D打印实战
  • 2026年6月浪琴中国区售后全面升级|最新官方维修服务探测报告及售后指南 - 浪琴服务中心
  • 【数据结构】哈夫曼树
  • OpenBoard:重新定义Android输入体验的终极开源解决方案
  • 突破性OpenCore配置工具:OCAT深度解析与实战指南
  • 5步掌握原神自动化助手:提升游戏效率的终极方案
  • Linux命令:nethogs
  • 构建有记忆的智能体:用上下文关联与向量检索破解幽灵故障
  • 广告监管升级,赣州实体店AI获客的正确姿势是什么? - 优家闲谈
  • 终极指南:如何让Windows资源管理器完美显示HEIC缩略图
  • G-Helper:免费轻量级华硕笔记本性能优化神器,告别臃肿的Armoury Crate
  • MON51调试器I2C通信改造与嵌入式开发实践
  • 电路设计入门:从电压电流到光控小夜灯的全流程实践
  • YM 设计甄选|2026 武汉家装全案流程 本土优质装企收费白皮书 - 品牌评测官
  • 猫抓浏览器扩展:三步解锁网页视频音频自由下载
  • 2026年5月重庆不锈钢橱柜厂家实力排行一览:重庆厨房橱柜/重庆厨房设备供应商/重庆商用不锈钢厨房设备/优选推荐 - 优质品牌商家
  • 高效网页资源嗅探工具:5个步骤掌握猫抓浏览器扩展
  • 五分钟掌握SketchUp STL插件:3D打印工作流的最佳搭档
  • 论文写作避坑指南:书匠策AI的免费查重到底有多香?
  • AI Agent在电商大促峰值期的弹性扩展能力怎样?深度拆解2026年企业级智能自动化底座
  • 零基础企业如何低成本搭建专属 GEO 优化系统
  • 猫抓扩展:5分钟解锁网页视频音频下载的终极武器
  • AI视觉技术在奢侈品鉴定领域的应用
  • LangChain4j 的核心架构是怎样的?它的六大核心组件分别是什么?
  • 核心逻辑重构:基于多 Agent 协同(一个负责生成用例,一个负责 Review)