若依前端后端分离 代码生成修改(1)
模板引擎修改
2023年3月7日
9:26
# 使用说明
前端 生成设置 包名默认 由ruoyi-generator/src/main/resources/generator.yml 中包名提供
多级目录 是从配置文件的最后开始算
例如generator.yml 中com.aaa.bbb
前端页面 包路径 配置为 com.aaa.bbb.ccc 模块配置为 ccc 功能配置为 zzz 此时为 二级目录结构 (对应若依后台管理 左侧为2层 最后一层(菜单 点击打开 页面))
前端页面 包路径 配置为 com.aaa.bbb.ccc.eee 模块配置为 eee 功能配置为 zzz 此时为 三级目录结构 (对应若依后台管理 左侧为3层 最后一层(菜单 点击打开 页面))
主要配置参数的引用和定义
- 表字段
.vm模板: 参数名 | 使用位置(.vm模板文件中) | 前端表单表头 | 默认值来源 | db表: gen_table |
---|---|---|---|---|
packageName | package ${packageName}.controller; | 生成包路径 | 配置文件 | Packag e_name |
ClassName和className | I${ClassName}Service ${className}Service; | - | DB 表名 配合配置文件使用 | class_name(类名非引用名) |
functionName | /** * 获取${functionName}详细信息 */ |
生成功能名 | DB表的注释 | function_name |
moduleName 模块名 | @RequestMapping("/${moduleName}/${businessName}") | 生成模块名 | 配置文件 包名最后一级 | module_name |
businessName 业务名 | ![]() |
生成业务名 | 配置文件 DB名最后一级 | business_name |
- 列字段
参数 | 前端表单表头 | db表: gen_table_column | ||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
|
解释:
a. DB表名 "_" 分割 命名 (windows MySQL 表名全部小写, 若要区分大小写,请修改数据库配置文件)
b. 配置文件所在位置: ruoyi-generator/src/main/resources/generator.yml
c. 默认表字段参数设置核心代码位置: ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java#initTable(...)
d. 默认列字段参数设置核心代码位置: ruoyi-generator/src/main/java/com/ruoyi/generator/util/GenUtils.java#initColumnField(...)
e. 使用位置只是举例具体全部 查看模板文件
<!-- -->
f. 个人使用的事若依前后端分离版本 3.2.0
模板引擎工作流程
引用来源 :https://oomspot.com/post/ruoyiguanlixitongruoyivuesandaimashengchengqiyuanl
-
首先看com.ruoyi.generator.controller.GenControllerimportTableSave 接口,它做了以下这些事情
a. 从information_schema数据库的tables表中查询目标表的表明、标注释、创建时间和更新时间,但是忽略掉定时任务的表和已经生成过的表。
b. 初始化表数据并将数据插入ruoyi数据库的gen_table表
c. 从information_schema数据库的columns表中查询目标表的列信息,包含字段名、字段注释、字段类型、是否允许为null等详细信息
d. 初始化列信息并将数据插入ruoyi数据库的gen_table_column表
<!-- -->
-
接下来看下 com.ruoyi.generator.controller.GenControllerbatchGenCode 接口,它做了以下这些事情
a. 从ruoyi数据库的gen_table、gen_table_column表查询出生成代码需要的表和列信息。
b. 初始化Velocity
c. 准备Velocity上下文信息(变量值信息)
d. 读取模板、渲染模板,然后将渲染后的模板内容添加进如压缩流,之后前端就可以下载zip压缩文件了。
-
导入按钮 业务流程
a. 前端 导入按钮 发送请求 http://localhost/dev-api/tool/gen/db/list?pageNum=1&pageSize=10&tableName=liner
b. controller流程
1. 获取前端 要导入的 tables (数组) 获得 DB 表名数组 2. 查询DB 获得 List\<GenTable\> 列表 (此时只封装了 DB中有的基本 数据) 3. importGenTable( List\<GenTable\> ) ①设置默认的表字段信息 ② 设置默认的列字段信息
- 设置默认的表字段信息
initTable(GenTable genTable, String operName)
// 判读配置文件是否设置除去前缀 ,去除前缀后 变为类名 全部小写后 首字母大写拼接
genTable.setClassName(convertClassName(genTable.getTableName()));
//从配置文件中获取 包名的配置
genTable.setPackageName(GenConfig.getPackageName());
// 包名的最后一级
genTable.setModuleName(getModuleName(GenConfig.getPackageName()));
//{_}分割命名 DB表名的最后一级
genTable.setBusinessName(getBusinessName(genTable.getTableName()));
//功能名 就是DB表的注释 如果表中的注释有 表或若依 替换为""
genTable.setFunctionName(replaceText(genTable.getTableComment()));
//从配置文件中获取 作者信息
genTable.setFunctionAuthor(GenConfig.getAuthor());
// SecurityUtils.getUsername(); 登录用户名
genTable.setCreateBy(operName);
- 设置默认的列字段信息
initColumnField(GenTableColumn column, GenTable table) 方法主要做的事
根据 DB字段名 (例first_name), 字段类型(例int(11)), 注释(曾用名), 约束(not null,主键...) 推断出
Java类型 , java属性, 插入, 编辑, 列表, 查询, 查询方式, 必填, 显示类型, 字典类型 这些字段的值
-
代码生成业务流程
a. 预览
b. 下载 只修改下载路径和导入路径
c. 保存到相关目录