# Springboot代码生成器 **Repository Path**: cicigodd/springboot-code-generator ## Basic Information - **Project Name**: Springboot代码生成器 - **Description**: 用于Springboot项目的代码生成操作,兼容任何MySQL数据库系列的Springboot项目 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-17 - **Last Updated**: 2025-07-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Springboot代码生成器 #### 介绍 用于Springboot项目的代码生成操作,兼容任何MySQL数据库系列的Springboot项目,本项目主要通过逆向数据的表,通过自定义freemarker模板生成java文件,本项目模板是用若依项目为例,理论上配置好文件和模板后兼容任何项目。 #### 软件架构 Springboot+MySQL+Freemarker #### 安装教程 1. 在idea中导入本项目 2. 在application配置文件里配置好数据库连接 #### 目录结构 ![输入图片说明](image/1721203906105.jpg) #### 使用说明 1. **创建ftl模板** ,在templates文件夹下新建ruoyi文件夹,在ruoyi文件夹内创建config.json和xxx.ftl模板 2. ** 编写config.json配置文件** ``` # 以若依框架为例,若依框架中一张表会最少会产生五个文件用于增删改查,controller、service、serviceImpl、mapper、entity # 所以在config.json文件中需要配置五个key,value对应五个文件,如需生成七个文件就创建七个key,value,key的名字可以随意 # value中的值 # absolutePath:文件夹的绝对路径,例如要生成controller文件,就把生成controller文件绝对路径的位置填上 # packageName:包名,例如要生成controller文件,就把生成controller文件的包名填上 # fileNameSuffix:文件名后缀,例如我的表名叫sys_user,那么转换成文件名为SysUser.java,此文件名不是我们想要的controller文件名格式,所以需要填写文件名后缀“Controller”,最终生成的文件名为SysUserController.java # templateName:模板名称,例如上面我们新建了一个controller.ftl那么这里就填写controller.ftl # 相信你已经发现路径中包含了{folder}这个字符串,此字符串的作用是,我们生成的绝对路径中包含以表名为路径的文件夹 # 例如以下controller的配置 假设表名叫sys_user {folder}字符串会被替换成驼峰名称sysUser那么得到的controller绝对路径如下 # "D:\\JavaProjects\\ruoyi\\ruoyi-admin\\src\\main\\java\\com\\ruoyi\\web\\controller\\system\\sysUser" # 其中absolutePath、packageName、fileNameSuffix、templateName这四个参数是固定参数,每个文件配置都需要拥有,你也可以自定义参数加在这四个参数后面即可 ``` ``` { "controller": { "absolutePath": "D:\\JavaProjects\\ruoyi\\ruoyi-admin\\src\\main\\java\\com\\ruoyi\\web\\controller\\system\\{folder}", "packageName": "com.ruoyi.web.controller.system.{folder}", "fileNameSuffix": "Controller", "templateName": "controller.ftl" }, "service": { "absolutePath": "D:\\JavaProjects\\ruoyi\\ruoyi-system\\src\\main\\java\\com\\ruoyi\\service\\{folder}", "packageName": "com.ruoyi.service.{folder}", "fileNameSuffix": "Service", "templateName": "service.ftl" }, "serviceImpl": { "absolutePath": "D:\\JavaProjects\\ruoyi\\ruoyi-system\\src\\main\\java\\com\\ruoyi\\service\\{folder}\\impl", "packageName": "com.ruoyi.service.{folder}.impl", "fileNameSuffix": "ServiceImpl", "templateName": "serviceimpl.ftl" }, "mapper": { "absolutePath": "D:\\JavaProjects\\ruoyi\\ruoyi-system\\src\\main\\java\\com\\ruoyi\\mapper\\{folder}", "packageName": "com.ruoyi.mapper.{folder}", "fileNameSuffix": "Mapper", "templateName": "mapper.ftl" }, "entity": { "absolutePath": "D:\\JavaProjects\\ruoyi\\ruoyi-system\\src\\main\\java\\com\\ruoyi\\domain\\{folder}", "packageName": "com.ruoyi.domain.{folder}", "fileNameSuffix": "", "templateName": "entity.ftl" } } ``` 3. **编写ftl模板** ``` # ftl模板原理就是通过替换某些字符串写入到新文件中 # params是模板参数,上面配置的config.json参数就放在其中, # 注意默认包含absolutePath、packageName、fileNameSuffix、templateName这四个参数固定参数 # 其中还包含一下数据库信息参数,以及默认参数 # moduleName:模块名称 例如:用户管理 # fileName:文件名称或类名 例如SysUserController # className:实体类类名 例如SysUser # objectName:对象名 例如sysUser # 除去params参数还有一个tableInfoList参数,这个参数是个List格式参数,其中包含数据库表的信息 # columnName:字段名 例如 user_name # javaName:java属性名 例如 userName # javaFuncName:java方法名 例如 UserName 用于生成get set方法 GetUserName() SetUserName() # columnComment:字段注释 例如 用户名 # dataType:数据库类型 例如 varchar # javaType:java类型 例如 String # isNullable:是否可为空 例如 NO/YES # dataLength:数据长度 例如 255 ``` ``` package ${params.packageName}; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.TableDataInfo; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import javax.annotation.Resource; import java.util.List; //${params.moduleName} @RestController public class ${params.fileName} extends BaseController{ @Resource private ${params.className}Service ${params.objectName}Service; //${params.moduleName}添加 @PostMapping("/${params.objectName}/add") public AjaxResult add(@RequestBody ${params.className} ${params.objectName}) { ${params.objectName}Service.add(${params.objectName}); return AjaxResult.success(); } //${params.moduleName}编辑 @PostMapping("/${params.objectName}/edit") public AjaxResult edit(@RequestBody ${params.className} ${params.objectName}) { ${params.objectName}Service.edit(${params.objectName}); return AjaxResult.success(); } //${params.moduleName}删除 @PostMapping("/${params.objectName}/delete/{id}") public AjaxResult delete(@PathVariable Integer id) { ${params.objectName}Service.delete(id); return AjaxResult.success(); } //${params.moduleName}详情 @GetMapping("/${params.objectName}/detail/{id}") public AjaxResult detail(@PathVariable Integer id) { ${params.className} ${params.objectName} = ${params.objectName}Service.detail(id); return AjaxResult.success(${params.objectName}); } //${params.moduleName}分页列表 @GetMapping("/${params.objectName}/list") public TableDataInfo page(${params.className} ${params.objectName}) { startPage(); List<${params.className}> list = ${params.objectName}Service.list(${params.objectName}); return getDataTable(list); } } ``` 4. **运行项目** ``` //运行项目后可以运行GenneratorCode类来生成代码,或者用postman发送请求,接口如下 //参数: //tableName:要生成的表名 //moduleName:要生成的模块名称 就是一个注释用 比如我叫用户管理模块 //templateForld:templates文件夹下的模板文件夹名称 我的名称叫ruoyi templates文件夹下可以创建多套模块针对不同项目 package com.cicigodd.panda.start; import cn.hutool.core.lang.Console; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONUtil; import java.util.HashMap; import java.util.Map; /** * 代码生成程序 */ public class GenneratorCode { public static void main(String[] args) { Map paramMap = new HashMap<>(); //表名 paramMap.put("tableName", "sys_user"); //模块名称 paramMap.put("moduleName", "用户管理"); //模板目录 paramMap.put("templateForld", "ruoyi"); //发起请求 String result = HttpRequest.post("http://localhost:55555/codebuild/generator/buildCode") .body(JSONUtil.toJsonStr(paramMap)) .timeout(2 * 1000) .execute().body(); Console.log(result); } } ``` #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)