RuoYi 系统升级 Mybatis-Plus 代码生成
续上 RuoYi 系统升级使用 Mybatis-Plus ,目前项目已经能够支持原本的 mybatis
代码,同时也能够支持新的 mybatis-plus
代码,接下来就继续调整 代码生成 功能的部分,这样就能够更加快速的实现业务需求功能。
如上图所示的样例,要生成的 student
表,这里面的信息其实是保存在两张数据表里面, gen_table
和 gen_table_column
为了使代码模板更简洁,项目中引入了 lombok
,需要在 ruoyi-common
项目中引入相关的依赖
如果不想使用它的话,自己就需要加入每个字段的 get/set
方法,例如下图所示,具体可以参看原项目中的 domain.java.vm
模板
调整 vm 模板
代码生成的功能,主要依靠 vm
模板来实现的,我们需要调整对应的代码模板。主要调整的是 ruoyi-generator
项目下的 vm
目录,这里区分了不同模块的代码。
Velocity 模板工具
这里先提一下 VelocityUtils
,这个工具类为模板引擎提供了很多上下文,而这些内容是提供给稍后介绍的代码模板用的,大概就是具体的数据表中的字段信息的封装,具体的内容可以去查看源码。
这里介绍几个重点的参数:
- ClassName:类的名字,例如
Student
- tableName:数据表的名字,例如
student
- columns:数据表的字段列表,通过查询
gen_table_column
- pkColumn:表主键字段名,例如
id
domain 模板
为了不影响原本的模板,这里就新建了一个 domain_plus.vm
文件,后面的模板也是如此操作。
这里有个处理,就是对数据表中 datatime
类型的字段,都统一处理为 LocalDateTime
,因为项目中已经使用 Springboot3
,就不再使用 Date
类型了
从系统获取到的 java 类型为 Date ,所以这里对应的做一下适配就行了。
mapper 模板
新建一个 mapper_plus.java.vm
文件,这里继承 mybatis-plus
的 BaseMapper,就这么简单
|
|
service 模板
新建一个 service_plus.java.vm
文件,这里继承 mybatis-plus
的 IService,就这么简单
|
|
后端代码的部分, domain、mapper 和 service 基本就完成了,后面控制层部分的代码,则是按照我个人的喜好来实现的,大家可以根据自己的情况进行修改即可
vo 模板
这里添加了一个 vo_plus.java.vm
文件,它的主要作用是 传递参数 和 页面展示,另外还有附带一些分页的信息和其他额外的公共字段。
代码跟 domain 基本是一致的,多的是继承一个 BasePageDtoRequest
类,其中 PageDtoRequest
为分页类
|
|
就是一个页码和条数
|
|
business 模板
创建新的 business_plus.java.vm
文件。
我个人喜欢多抽离一个业务层,不将业务代码写在 service
中,一般有两个原因,第一避免循环依赖,第二 mybatis-plus
的自动代码生成一般都会包括 service
代码,避免覆盖或者其他情况。
这里重点说一下分页的方法,其他的可以去看源码。一般单表的分页,直接调用 service
的 page
方法即可,其他的就是组装前端传过来的查询字段。最终的效果,可能是下图这样的。
这里的难点在于,我们需要知道到底要查询哪些字段,但是这个是可以通过后台去配置,而且还记录在 gen_table_column
表中。
这些参数可以通过上下文 columns
获取到,所以我们就可以通过遍历判断 isQuery
即可实现。
controller 模板
创建新的 controller_plus.java.vm
文件。
在响应返回的结构体这边,我自己添加了一些类,而且方法名也做了调整,区别于原本项目中的,具体的就不再这边一一介绍了,大家可以看源码。
以下是前端项目的模板调整
js api 模板
新建一个 api_plus.js.vm
文件,这里只要编写的是后端的接口,注意这里要的路径,不同于原项目
vue 模板
新建一个 index_plus.vue.vm
文件,这里就是列表页面的代码。
这里主要注意的是,因为调整过了响应的结构体,所以我们要对应的调整到页面中,例如这里的分页返回
对应的页面的调整,一个是列表数据,一个是分页数据
其他的接口也是类似的,这里就不一一介绍了。
模板加载调整
由于我们加入了新的模板文件,所以需要调整启用这些新的模板。
在 VelocityUtils.java
文件中,调整以下两个位置的代码:
1)调整 getTemplateList
方法内的,注意不要保留旧的 vm
模板
2)调整 getFileName
方法内的,注意不要保留旧的 vm
模板
测试
我们以下图为测试例子,生成完整的代码
下载后解压,main
目录里面的是后端代码,vue
目录里面的是前端代码
将后端的相关代码,放到对应的项目内即可
我这边是放在 ruoyi-system
项目内
这里需要注意 business
和 controller
的代码,需要放在 ruoyi-admin
项目内
接下来,启动项目,没报错的话,就代表生成的代码没问题了,然后添加对应的菜单配置,这里只添加了列表展示
点开列表,数据和分页都没问题
查询也没问题