模板引擎修改
2023年3月7日
9:26
.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. 保存到相关目录