news 2026/5/30 16:32:26

【然然管理系统】基于 SpringBoot+MyBatisPlus+Freemarker 实现代码生成功能(上)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【然然管理系统】基于 SpringBoot+MyBatisPlus+Freemarker 实现代码生成功能(上)

然然管理系统仓库地址,欢迎移步仓库点个小星星
https://gitee.com/OceanCore/ranran.git
https://github.com/qiaoting/ranran.git

一、前言

在后台管理系统开发中,CRUD 代码的编写占据了大量重复工作 —— 每个业务表都要写 Entity、Mapper、Service、Controller,不仅效率低,还容易出现格式不统一的问题。为此,然然管理系统新增了自动化代码生成功能,基于 SpringBoot+MyBatis+Freemarker 技术栈,实现 “数据库表→Java 业务代码” 的一键生成,本文先从整体设计和核心模块入手,讲解功能的实现思路。

系统截图:

二、功能设计

本代码生成功能的核心目标是:前端展示数据库表列表 → 选择表并传入基础配置 → 后端生成 Entity、Mapper、Service、Controller 代码 → 前端展示生成结果。整体流程如下:

前端请求表列表 → 后端查询information_schema获取表信息 → 前端提交表名/作者/模块名等配置 → 后端查询表字段 → 字段类型映射 → Freemarker渲染模板 → 返回生成的代码字符串 → 前端展示

三、技术环境

  • 基础框架:SpringBoot
  • 数据持久层:MyBatis(XML + 接口)
  • 模板引擎:Freemarker(代码模板渲染)
  • 辅助工具:Lombok(简化实体类)、自定义工具类(表名转类名、类型映射)

四、模块拆解

1. 数据层:查询数据库表与字段

核心是通过information_schema系统库查询表和字段信息,这是跨数据库(MySQL)通用的方式:

  • 表查询(GeneratorTableMapper):查询指定数据库下的所有表名、引擎、表注释。
  • 字段查询(GeneratorTableFieldMapper):查询指定表的字段名、类型、注释、主键、可空性等。

关键 Mapper XML 示例(字段查询):

<select id="selectAllField" parameterType="String" resultType="GeneratorTableField"> select column_name as columnname, data_type as columntype, column_comment as remarks, case when is_nullable = 'yes' then 1 else 0 end as isnullable, case when column_key = 'pri' then 1 else 0 end as isprimarykey from information_schema.columns where table_schema = (select database()) and table_name = #{tableName} order by ordinal_position </select>

2. 服务层:业务逻辑处理

服务层分为 3 个核心类,职责单一:

  • GeneratorTableService:封装表列表查询逻辑,对外提供getAllTable方法。
  • GeneratorTableFieldService:核心是字段类型映射(数据库类型→Java 类型),比如varcharStringdatetimeLocalDateTime
  • GeneratorService:整合表字段信息,通过 Freemarker 渲染模板,生成各类代码文件。

3. 工具类:通用能力封装

  • TableUtil:实现 “下划线表名→驼峰类名” 转换,支持移除指定前缀(比如t_sys_)。
  • GenerateUtil:组装代码生成所需的类信息(模块名、基础包名、类名等),补充到ClassInfoDto中。

4. 控制层:接口暴露

GeneratorController提供两个核心接口:

  • GET /api/generator/listTable:查询数据库表列表,支持指定数据库名。
  • POST /api/generator/getCode:接收表名、作者、模块名等配置,返回生成的代码 Map(key 为文件名,value 为代码字符串)。

五、功能演示(接口层面)

查询表列表:

GET /api/generator/listTable?dbName=ranran_db

返回结果包含表名、表注释、引擎等信息,前端可渲染为下拉列表 / 表格。

生成代码:

POST /api/generator/getCode { "tableName": "sys_user", "moduleName": "system", "functionName": "用户管理", "author": "ranran" }

返回结果为 Map,示例:

{ "entity.java": "package com.ranran.system.entity;...", "mapper.java": "package com.ranran.system.mapper;...", "service.java": "package com.ranran.system.service;...", "controller.java": "package com.ranran.system.controller;..." }

六、总结

本文从整体视角拆解了然然管理系统代码生成功能的核心设计与模块划分,下一篇将深入讲解字段类型映射、Freemarker 模板渲染、表名转换等核心细节,以及功能的扩展与优化思路。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/30 1:35:03

基于MiDaS的深度感知:快速部署与使用

基于MiDaS的深度感知&#xff1a;快速部署与使用 1. 引言&#xff1a;AI 单目深度估计的现实意义 在计算机视觉领域&#xff0c;从单张2D图像中恢复3D空间结构一直是极具挑战性的任务。传统方法依赖多视角几何或激光雷达等硬件设备&#xff0c;成本高且部署复杂。近年来&…

作者头像 李华
网站建设 2026/5/23 15:05:41

简单理解:什么是双线接口(TWI)

核心定义双线接口​ 是一种串行通信接口协议&#xff0c;它仅使用两条信号线在多个设备&#xff08;通常是一个主设备和多个从设备&#xff09;之间进行数据交换。它最著名的实现是IC。虽然TWI有时被用作IC的同义词&#xff0c;但两者在技术渊源上稍有区别&#xff0c;不过在实…

作者头像 李华
网站建设 2026/5/20 19:12:36

小显存救星:云端GPU运行大型分类模型技巧

小显存救星&#xff1a;云端GPU运行大型分类模型技巧 引言 当你只有4G显存的显卡&#xff0c;却想跑动需要24G显存的SOTA&#xff08;State-of-the-Art&#xff09;分类模型时&#xff0c;是不是感觉像用自行车拉货柜&#xff1f;别担心&#xff0c;云端GPU和优化技术就是你的…

作者头像 李华
网站建设 2026/5/29 6:42:24

大数据专业就业指南

大专大数据专业是否需要学习数据分析数据分析作为大数据领域的核心技能之一&#xff0c;是大专大数据专业学生必须掌握的重要内容。数据分析能力能够帮助学生更好地理解和处理海量数据&#xff0c;为后续的就业和职业发展打下坚实基础。数据分析在大数据专业中的重要性数据分析…

作者头像 李华
网站建设 2026/5/20 1:47:04

微服务分布式SpringBoot+Vue+Springcloud的动漫服装租赁妆造服务平台的设计与实践 _

目录项目背景与目标技术架构设计核心功能模块系统创新点实践成果开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;项目背景与目标 动漫服装租赁妆造服务平台旨在解决二次元文化爱好者服装道具租赁、化妆造型需求分散的问题。通过…

作者头像 李华
网站建设 2026/5/20 10:52:50

基于SpringBoot的中小型制造企业质量管理系统毕设源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。 一、研究目的 本研究旨在深入探讨基于SpringBoot框架的中小型制造企业质量管理系统&#xff08;QMS&#xff09;的设计与实现&#xff0c;以期为我国中小型制造企业的质量…

作者头像 李华