|
1 | | -# SpringBootCodeGenerator |
| 1 | +# SpringBootCodeGenerator 大狼狗代码生成器 |
2 | 2 | ---- |
3 | 3 | 又名`Java代码生成器`、`JAVA在线代码生成平台`、`sql转java`、`大狼狗代码生成器`、`mybatis在线生成器`、`SQL转Java JPA、MYBATIS实现类代码生成平台`<br> |
4 | 4 |  |
|
7 | 7 | [](https://github.com/moshowgame/SpringBootCodeGenerator/actions/workflows/maven.yml) |
8 | 8 |
|
9 | 9 | # Author |
10 | | ->powered by `Moshow郑锴(大狼狗)` , [https://zhengkai.blog.csdn.net](https://zhengkai.blog.csdn.net) |
| 10 | +>🚀 |
| 11 | +Powered by `Moshow郑锴(大狼狗)` 🌟 Might the holy code be with you ! |
| 12 | +> <br>**`CSDN`传送门**️️➡️ [https://zhengkai.blog.csdn.net](https://zhengkai.blog.csdn.net) |
| 13 | +> <br>**微信公众号**➡️`软件开发大百科` |
11 | 14 |
|
12 | 15 | # Description |
| 16 | +本项目是基于 Spring Boot 3 和 Freemarker 的高效代码生成平台,旨在帮助开发者告别繁琐重复的 CRUD 操作,释放双手,让开发更高效。项目支持主流数据库(MySQL、Oracle、PgSQL)和多种模板(JPA、Mybatis、MybatisPlus 等)。 |
13 | 17 | > 🚀 `Spring Boot Code Generator` — a powerful code generation platform built on SpringBoot3 & Freemarker |
14 | 18 | > ✨ 基于 `SpringBoot3` 和 `Freemarker` 的高效代码生成平台 |
15 | 19 |
|
|
34 | 38 | > 🙌 Special thanks to BeJSON 前站长 `三叔` 的慧眼与支持,让项目得以脱颖而出,感恩! |
35 | 39 |
|
36 | 40 |
|
37 | | -# URL |
38 | | - |
39 | | -- 感谢`卡卡`部署在[BEJSON](https://java.bejson.com/generator)上,目前是BeJSON专供的`金牌工具`<br> |
40 | | -- 感谢`jully.top`部署的副本 [https://jully.top/generator/](https://jully.top/generator/)。<br> |
41 | | -- 感谢`staticfile`CDN提供稳定、快速、免费的静态文件CDN加速服务(在线版本) |
42 | | - |
43 | | -| 访问地址 | http://localhost:1234/generator | |
44 | | -|:-----------------------|:--------------------------------------------------------------| |
45 | | -| BEJSON 金牌工具 在线地址 | https://java.bejson.com/generator/ | |
46 | | -| JSON.CN 金牌工具 在线地址 | https://java.json.cn/generator/ | |
47 | | -| Jully 在线地址 | https://jully.top/generator/ | |
48 | | -| NeverWaive 在线地址 | https://codegenerator.neverwaive.cn/ | |
49 | | -| CSDN BLOG | https://zhengkai.blog.csdn.net | |
50 | | -| GITEE仓库 | https://gitee.com/moshowgame/SpringBootCodeGenerator/releases | |
51 | | -| GITHUB仓库 | https://github.com/moshowgame/SpringBootCodeGenerator | |
52 | | - |
53 | | -# Tips or Features |
54 | | -- 支持`DDL SQL`/`INSERT SQL`/`SIMPLE JSON`/`SELECT SQL`(*New)四种生成模式 |
55 | | -- `自动记忆`最近生成的内容,最多保留9个 |
56 | | -- 提供众多`通用模板`,易于使用,复制粘贴加简单修改即可完成CRUD操作 |
57 | | -- 支持`特殊字符`模板(`#`请用`井`代替;`$`请用`¥`代替) |
58 | | -- `Util集合`提供一些基本对象的使用方法供方便COPY,如对应的CRUD SQL语句、setMap、getMap、get属性等等 |
59 | | -- 关于`类名注释`,可根据`comment=(mysql)`或者`comment on table(pgsql/oracle)`生成 |
60 | | -- 可设置是否`自动引包`(java中的import)及`引入包路径`(java类中的package),建议取消并配合IDEA的自动引包更智能(Settings→Editor→General→Auto Import,勾选Add unambiguous imports on the fly以及Optimize imports on the fly)。 |
61 | | -- 可设置`表名前缀`,例如sys_user前缀为sys_之后可以正确生成user类 |
62 | | -- 可在`applicaltion.yml`中的`OEM.mode`设置`js/css引入模式`为`local`(本地模式,默认)/`CDN`(云CDN模式,在线网站推荐,省流量) |
63 | | -- OEM信息可以在`applicaltion.yml`中的`OEM`中更改 |
64 | | -- *支持公共js/css的Local/CDN模式切换,方便`本地`或者`工具站`进行部署,可以在`application.yml`的`OEM.Mode=`进行设置,之后请在`header-CDN-v2.html`/`header-local-v2.html`中检查对应js/css配置是否正确。默认为`CDN`模式。对于没有网络的环境请使用`local`模式。 |
65 | | -- 如何判断是否包含Date日期类并引入,搜索`<#assign importDdate = true />`即可找到对应的方法判断和引入 |
66 | | - |
67 | | -# Branch Detail 分支介绍 |
68 | | -- Master:主力分支,基于SpringBoot3+,需要JDK17+ |
69 | | -- JDK11:兼容分支,版本落后,基于SpringBoot2+,但支持JDK8/JDK11等旧JDK版本[https://github.com/moshowgame/SpringBootCodeGenerator/tree/jdk11] |
70 | | - |
71 | | -# 更新预告 |
72 | | -1.计划加入AI来帮忙生成更多样式的模板 |
73 | | -2.改进JSqlParser Engine (Select SQL and Create SQL) |
| 41 | + |
| 42 | +## 功能特性 |
| 43 | + |
| 44 | +### 支持多种生成模式 |
| 45 | +- DDL SQL 模式:通过建表语句生成代码 |
| 46 | +- INSERT SQL 模式:通过插入语句生成代码 |
| 47 | +- SELECT SQL 模式:通过查询语句生成代码 |
| 48 | +- JSON 模式:通过 JSON 数据生成代码 |
| 49 | + |
| 50 | +### 支持多种模板 |
| 51 | +- JPA 模板 |
| 52 | +- MyBatis 模板 |
| 53 | +- MyBatis-Plus 模板 |
| 54 | +- BeetlSQL 模板 |
| 55 | +- CommonMapper 模板 |
| 56 | +- TkMyBatis 模板 |
| 57 | +- JDBC Template 模板 |
| 58 | +- 前端 UI 模板(Element UI、Bootstrap UI 等) |
| 59 | + |
| 60 | +### 其他特性 |
| 61 | +- 自动记忆最近生成的内容 |
| 62 | +- 支持特殊字符模板(# 用 井 代替,$ 用 ¥ 代替) |
| 63 | +- 可设置表名前缀 |
| 64 | +- 可选择是否自动引包 |
| 65 | +- 支持本地/CDN 静态资源引入模式切换 |
| 66 | + |
| 67 | +## 技术栈 |
| 68 | + |
| 69 | +- Spring Boot 3 |
| 70 | +- Freemarker 模板引擎 |
| 71 | +- FastJSON2 |
| 72 | +- JSqlParser SQL 解析器 |
| 73 | +- Lombok 简化代码工具 |
| 74 | + |
| 75 | +## 使用说明 |
| 76 | + |
| 77 | +### 启动项目 |
| 78 | + |
| 79 | +```bash |
| 80 | +# 克隆项目 |
| 81 | +git clone https://github.com/moshowgame/SpringBootCodeGenerator.git |
| 82 | + |
| 83 | +# 进入项目目录 |
| 84 | +cd SpringBootCodeGenerator |
| 85 | +# 编译项目 |
| 86 | +mvn clean compile |
| 87 | +# 运行项目 |
| 88 | +mvn spring-boot:run |
| 89 | +``` |
| 90 | + |
| 91 | +项目启动后访问 http://localhost:1234/generator |
| 92 | + |
| 93 | +### 添加新模板 |
| 94 | + |
| 95 | +1. 在 `resources/templates/code-generator` 目录中找到对应类型 |
| 96 | +2. 复制并编写 Freemarker 模板文件(.ftl) |
| 97 | +3. 修改 `template.json` 文件,新增模板信息 |
| 98 | + |
| 99 | +### 配置说明 |
| 100 | + |
| 101 | +| **配置项** | **说明** | **默认值** | |
| 102 | +|:----|:----|:----| |
| 103 | +| 作者 | authorName | zhengkai.blog.csdn.net | |
| 104 | +| 包名 | packageName | cn.devtools | |
| 105 | +| 返回(成功) | returnUtilSuccess | Return.SUCCESS | |
| 106 | +| 返回(失败) | returnUtilFailure | Return.ERROR | |
| 107 | +| 忽略前缀 | ignorePrefix | sys_ | |
| 108 | +| 输入类型 | dataType | DDL SQL | |
| 109 | +| TinyInt转换 | tinyintTransType | int | |
| 110 | +| 时间类型 | timeTransType | Date | |
| 111 | +| 命名类型 | nameCaseType | CamelCase/驼峰 | |
| 112 | +| 是否包装类型 | isPackageType | true | |
| 113 | +| 是否swaggerUI | isSwagger | false | |
| 114 | +| 是否字段注释 | isComment | true | |
| 115 | +| 是否自动引包 | isAutoImport | | |
| 116 | +| 是否带包路径 | isWithPackage | | |
| 117 | +| 是否Lombok | isLombok | true | |
| 118 | + |
| 119 | +| **模板变量** | **说明** | |
| 120 | +|:-------------|:---------------| |
| 121 | +| tableName | sql中的表名 | |
| 122 | +| className | java类名 | |
| 123 | +| classComment | sql表备注/java类备注 | |
| 124 | +| fieldName | 字段名 | |
| 125 | +| fieldComment | 字段备注 | |
| 126 | + |
| 127 | + |
| 128 | + |
| 129 | +## 重构2025说明 |
| 130 | + |
| 131 | +本项目的重构2025在原有基础上进行了现代化重构,优化了项目结构和代码组织,使其更符合现代 Spring Boot 应用的最佳实践。 |
| 132 | + |
| 133 | +### 重构亮点 |
| 134 | + |
| 135 | +1. **清晰的分层架构**:采用 Controller-Service-DTO-VO 分层设计,各层职责明确 |
| 136 | +2. **接口与实现分离**:服务层采用接口与实现分离的设计,便于测试和扩展 |
| 137 | +3. **策略模式应用**:使用策略模式处理不同类型的 SQL 解析,易于扩展新的解析方式 |
| 138 | +4. **现代化开发规范**:遵循 Spring Boot 和 Java 开发最佳实践 |
| 139 | +5. **完善的异常处理**:统一异常处理机制,提供更友好的错误提示 |
| 140 | + |
| 141 | +### 重构后项目结构 |
| 142 | + |
| 143 | +``` |
| 144 | +com.softdev.system.generator |
| 145 | +├── GeneratorApplication.java # 启动类 |
| 146 | +├── config # 配置类包 |
| 147 | +│ ├── WebMvcConfig.java # MVC配置 |
| 148 | +│ └── GlobalExceptionHandler.java # 全局异常处理器 |
| 149 | +├── controller # 控制层 |
| 150 | +│ ├── PageController.java # 页面跳转控制器 |
| 151 | +│ ├── CodeGenController.java # 代码生成相关接口 |
| 152 | +│ └── TemplateController.java # 模板相关接口 |
| 153 | +├── service # 服务层接口 |
| 154 | +│ ├── CodeGenService.java # 代码生成服务接口 |
| 155 | +│ ├── TemplateService.java # 模板服务接口 |
| 156 | +│ └── parser |
| 157 | +│ ├── SqlParserService.java # SQL解析服务接口 |
| 158 | +│ └── JsonParserService.java # JSON解析服务接口 |
| 159 | +├── service.impl # 服务实现层 |
| 160 | +│ ├── CodeGenServiceImpl.java # 代码生成服务实现 |
| 161 | +│ ├── TemplateServiceImpl.java # 模板服务实现 |
| 162 | +│ └── parser |
| 163 | +│ ├── SqlParserServiceImpl.java # SQL解析服务实现 |
| 164 | +│ └── JsonParserServiceImpl.java # JSON解析服务实现 |
| 165 | +├── entity # 实体类 |
| 166 | +│ ├── dto |
| 167 | +│ │ ├── ParamInfo.java # 参数信息DTO |
| 168 | +│ │ ├── ClassInfo.java # 类信息DTO |
| 169 | +│ │ └── FieldInfo.java # 字段信息DTO |
| 170 | +│ ├── vo |
| 171 | +│ │ └── ResultVo.java # 统一返回结果VO |
| 172 | +│ └── enums |
| 173 | +│ └── ParserTypeEnum.java # 解析类型枚举 |
| 174 | +├── util # 工具类包 |
| 175 | +│ ├── FreemarkerUtil.java # Freemarker工具类 |
| 176 | +│ ├── StringUtilsPlus.java # 字符串工具类 |
| 177 | +│ ├── MapUtil.java # Map工具类 |
| 178 | +│ ├── mysqlJavaTypeUtil.java # MySQL类型转换工具类 |
| 179 | +│ └── exception |
| 180 | +│ ├── CodeGenException.java # 自定义业务异常 |
| 181 | +│ └── SqlParseException.java # SQL解析异常 |
| 182 | +└── constant # 常量定义 |
| 183 | + └── CodeGenConstants.java # 代码生成常量(待实现) |
| 184 | +``` |
| 185 | + |
| 186 | +### 统一响应格式 |
| 187 | + |
| 188 | +所有控制器方法均返回 ResultVo 统一响应对象,保持与前端的兼容性: |
| 189 | + |
| 190 | +```java |
| 191 | +// 成功响应 |
| 192 | +ResultVo.ok(data) |
| 193 | + |
| 194 | +// 错误响应 |
| 195 | +ResultVo.error(message) |
| 196 | +``` |
| 197 | + |
| 198 | +## 重构优势 |
| 199 | + |
| 200 | +1. **结构清晰**:通过合理的包结构和分层设计,使项目结构更加清晰易懂 |
| 201 | +2. **易于维护**:各层职责明确,便于定位和修复问题 |
| 202 | +3. **易于扩展**:采用策略模式等设计模式,便于添加新的功能模块 |
| 203 | +4. **现代化**:遵循 Spring Boot 和 Java 的最新最佳实践 |
| 204 | +5. **前后端兼容**:保持与现有前端代码的数据交互格式,无缝升级 |
| 205 | + |
| 206 | +## 升级问题解决方案 |
| 207 | + |
| 208 | +### FastJSON 升级到 FastJSON2 |
| 209 | + |
| 210 | +如果在升级 FastJSON 到 FastJSON2 版本时遇到 FastJsonHttpMessageConverter 找不到类问题以及 FastJsonConfig 找不到问题,需要安装以下类库: |
| 211 | +- fastjson2 |
| 212 | +- fastjson2-extension |
| 213 | +- fastjson2-extension-spring6 |
| 214 | + |
| 215 | +### Spring Boot 3 升级 |
| 216 | + |
| 217 | +当项目从 Spring Boot 2.x 升级到 3.x 时,可能会遇到 "java: 程序包 javax.servlet.http 不存在" 问题,这是因为 Spring Boot 3 使用了 Jakarta EE 9+,包名从 javax.* 变更为 jakarta.*。 |
| 218 | + |
| 219 | + |
| 220 | +## 版权信息 |
| 221 | + |
| 222 | +本项目遵循相关开源协议,欢迎提交问题、分享常用模板,或将你的灵感通过 PR 实现! |
| 223 | + |
| 224 | +## Stargazers over time |
| 225 | +[](https://starchart.cc/moshowgame/SpringBootCodeGenerator) |
| 226 | + |
| 227 | +2025 NewUI V2版本<br> |
| 228 | +<img src="./newui_version_2.png"> |
| 229 | +配置模板<br> |
| 230 | +<img src="./codegenerator2.png"> |
| 231 | +网站流量分析-2024<br> |
| 232 | +<img src="./site_analysis-2024.png"> |
| 233 | +代码与你,越变越强<br> |
| 234 | +<img src="./donate.png"> |
74 | 235 |
|
75 | 236 | # Update Logs |
76 | 237 | | 更新日期 | 更新内容 | |
77 | 238 | |:-----------|:------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
| 239 | +| 2025.12.07 | 后端重构优化 | |
78 | 240 | | 2025.09.14 | 优化JSqlParser Engine(DDL Create SQL和Select SQL),适配更高级复杂的SQL | |
79 | 241 | | 2025.09.13 | JSqlParser Engine全新升级,目前Select SQL模式相对稳定! <br>更新SpringBoot等类库版本,修复漏洞<br>修复CDN问题,切换为staticfile.org | |
80 | 242 | | 2025.09.06 | 处理建表字段包含 using 字符时无法生成对应字段的情况(感谢@wubiaoo的反馈和@willxiang的PR) | |
|
147 | 309 | | 2018.09.15 | 新增Swagger-UI模板.修复一些命名和导入问题.JPA的Entity默认第一个字段为Id,如果不是请手工修改. | |
148 | 310 | | 2018.09.13 | 修复字段没有描述以及类型为DATE型导致的问题.新增JPA的Controller模板. | |
149 | 311 | | 2018.08.31 | 初始化项目.新增JPA系列Entity+Repository模板. | |
150 | | - |
151 | | -# ClassInfo/TableInfo |
152 | | -|名称|说明| |
153 | | -|:----|:----| |
154 | | -|packageName|自定义的包名| |
155 | | -|authorName|自定义的作者名| |
156 | | -|tableName|sql中的表名| |
157 | | -|className|java类名| |
158 | | -|classComment|sql表备注/java类备注| |
159 | | -|fieldName|字段名| |
160 | | -|fieldComment|字段备注| |
161 | | - |
162 | | -# Options |
163 | | -|名称|说明|默认值| |
164 | | -|:----|:----|:----| |
165 | | -|作者 |authorName|zhengkai.blog.csdn.net| |
166 | | -|包名 |packageName|cn.devtools| |
167 | | -|返回(成功)|returnUtilSuccess|Return.SUCCESS| |
168 | | -|返回(失败)|returnUtilFailure|Return.ERROR| |
169 | | -|忽略前缀|ignorePrefix |sys_| |
170 | | -|输入类型 |dataType|DDL SQL| |
171 | | -|TinyInt转换 |tinyintTransType|int| |
172 | | -|时间类型 |timeTransType|Date| |
173 | | -|命名类型 |nameCaseType|CamelCase/驼峰| |
174 | | -|是否包装类型 |isPackageType|true| |
175 | | -|是否swaggerUI|isSwagger|false| |
176 | | -|是否字段注释|isComment|true| |
177 | | -|是否自动引包|isAutoImport|| |
178 | | -|是否带包路径|isWithPackage|| |
179 | | -|是否Lombok|isLombok|true| |
180 | | - |
181 | | - |
182 | | -# How to add a new template |
183 | | -1. `resources/templates/code-generator`中找到对应类型 |
184 | | -2. COPY并编写freemarker模板文件`.ftl` |
185 | | -3. 修改`template.json`文件,新增模板信息,页面可动态加载 |
186 | | - |
187 | | -# Upgrade Issue Resolution 升级问题解决方案 |
188 | | -- 如果你最近也在升级FastJson到FastJson2版本,而跟我一样也遇到了FastJsonHttpMessageConverter找不到类问题以及FastJsonConfig找不到问题,那么恭喜你,看完本文,安装完fastjson2、fastjson2-extension、fastjson2-extension-spring6这三个类库,你就可以成功使用新版FastJson2了。 |
189 | | - [FastJson2中FastJsonHttpMessageConverter找不到类问题](https://blog.csdn.net/moshowgame/article/details/138013669) |
190 | | - |
191 | | -- 当项目从2.7.x的springboot升级到3.0.x的时候,遇到一个问题“java: 程序包javax.servlet.http不存在” 问题: |
192 | | - [java: 程序包javax.servlet.http不存在](https://zhengkai.blog.csdn.net/article/details/131362304) |
193 | | - |
194 | | -- [CSDN【SpringBoot2启示录】专栏](https://blog.csdn.net/moshowgame/category_9274885.html) |
195 | | - |
196 | | -## Stargazers over time |
197 | | -[](https://starchart.cc/moshowgame/SpringBootCodeGenerator) |
198 | | - |
199 | | -2025 NewUI V2版本 |
200 | | -<img src="./newui_version_2.png"> |
201 | | -配置模板 |
202 | | -<img src="./codegenerator2.png"> |
203 | | -网站流量分析-2024 |
204 | | -<img src="./site_analysis-2024.png"> |
205 | | -代码与你,越变越美 |
206 | | -<img src="./donate.png"> |
207 | | - |
|
0 commit comments