news 2026/4/21 19:13:46

【然然管理系统】基于 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/4/18 4:16:48

如何让AI看懂产线缺陷?Qwen3-VL-WEBUI落地实践全解析

如何让AI看懂产线缺陷&#xff1f;Qwen3-VL-WEBUI落地实践全解析 在一条高速运转的SMT贴片生产线上&#xff0c;一块刚完成回流焊的PCB板被自动传送至视觉检测工位。摄像头瞬间抓拍高清图像——画面中某处焊点隐约泛着不规则的银光。传统算法或许只能标记“异常区域”&#xf…

作者头像 李华
网站建设 2026/4/18 15:59:54

简单理解:PWM(脉宽调制)简单示例配置流程

第一部分&#xff1a;PWM 基础概念什么是 PWM&#xff1f;想象一下用开关控制一个灯泡&#xff1a;一直开着 → 灯泡最亮一直关着 → 灯泡熄灭快速开关&#xff08;如每秒 1000 次&#xff09;→ 人眼看到不同亮度PWM&#xff08;脉宽调制&#xff09;就是这个原理&#xff0c;…

作者头像 李华
网站建设 2026/4/21 18:53:21

AI万能分类器开箱即用:0配置镜像,10分钟出结果

AI万能分类器开箱即用&#xff1a;0配置镜像&#xff0c;10分钟出结果 引言&#xff1a;企业分类难题的AI解法 市场部小王最近很头疼——领导要求下周提交全系产品的分类分析报告&#xff0c;但IT部门排期至少要两周。这种场景在企业中太常见了&#xff1a;临时性分析需求遇到…

作者头像 李华
网站建设 2026/4/18 2:54:05

微服务分布式SpringBoot+Vue+Springcloud大数据的商品推荐系统_ 爬虫可视化

目录微服务分布式商品推荐系统架构概述核心功能模块设计技术实现亮点开发技术源码文档获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;微服务分布式商品推荐系统架构概述 该系统采用SpringBootVueSpringCloud技术栈构建&#xff0c;结合大数据分…

作者头像 李华
网站建设 2026/4/20 19:17:20

基于SpringBoot的同城上门喂遛宠物系统毕业设计

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在设计并实现一个基于SpringBoot框架的同城上门喂遛宠物系统。该系统旨在解决当前宠物主人在忙碌的生活中难以兼顾宠物照顾的问题&#xff0c;通过提供便…

作者头像 李华
网站建设 2026/4/17 20:39:18

基于SpringBoot的物业管理系统毕业设计源码

博主介绍&#xff1a;✌ 专注于Java,python,✌关注✌私信我✌具体的问题&#xff0c;我会尽力帮助你。一、研究目的本研究旨在深入探讨基于SpringBoot框架的物业管理系统设计与实现&#xff0c;以解决当前物业管理中存在的效率低下、信息孤岛、用户体验不佳等问题。具体研究目的…

作者头像 李华