若依项目学习笔记06——MyBatis配置详解
1. MyBatis配置详解
这个项目的数据层用的是mybatis,所有需要的sql语句都在配置文件中设置,属于半自动,也方便维护;下面我们就来看一下mybatis的配置吧┏ (゜ω゜)=☞
1.1 导入与配置
在spring boot使用mybatis,我们首先要加入相应的依赖,然后在配置文件中(ruoyi-admin下)进行配置,这块其实没什么好讲的...
1.2 配置原理
我们打开 MybatisAutoConfiguration
(一般spring boot的自动配置类都是 XxxAutoConfiguration
的形式,如果我们想要对某个内容进行配置,可以进到相应的自动配置类中),然后打开 MybatisProperties
属性
@ConfigurationProperties
: 这个注解就是spring boot经常能看到的,配合配置文件进行使用,例如这里是设置在配置文件中对mybatis进行配置的话,需要加前缀mybatis:
(大家看看配置文件是不是这样?);然后MybatisProperties
的其他属性就是其他的配置内容,比如我们用到的 搜索指定包别名typeAliasesPackage、配置mapper的扫描mapperLocations和加载全局的配置文件configLocation等,需要配置什么,在这个类中找到相应属性在配置文件中配置即可;最后有一个Configuration
配置属性,这个是指定外部的mybatis配置文件,也就是我们项目的 mybatis-config.xml 文件,这个我们项目中添加了,所以在配置文件中就不用添加上去
1.3 重写
需要注意的是,我们重写了 MyBatis,即 framework.config.MyBatisConfig;找到 sqlSessionFactory()
方法,主要是对我们需要在配置文件中添加的配置的部分进行重写,让配置文件内容生效;大家模仿着原来的 MybatisProperties
中配置的写法即可,这里就不详细讲了,大家自行看一下
2. MyBatis的使用
其实默认大家都是学过mybatis的,这里就只是简单跟大家讲一下需要注意的地方就好,大家不介意的话可以去看我之前写的mybatis学习笔记;以下都是用SysConfigMapper.xml作为例子
2.1 关于配置文件
2.2 关于mapper文件
- 目标接口方法名和mapper文件的id和目标空间等属性要对应,否则无法生效
- 一般目标接口都要加上注解
@mapper
才能生效,但是我们在 framework.config.ApplicationConfig 中做了配置,直接扫描其所在的包,这样就省去了一个个加的步骤了,大家自行查看 - 可以发现实体类与数据库属性的名称是没有对应的,一个是驼峰一个是下划线,所以这里就使用了
resultMap
进行对应转换(当然,你也可以去mybatis-config.xml中开启驼峰命名匹配);记得返回类型也要对应~ - 可以看到其中有一个删除方法,这里内容太多,所以直接使用
<foreach
进行循环来批量删除
3. 分页
3.1 配置详解
我们使用的是 PageHelper分页插件 ,使用前需要添加相应依赖;关于其配置指南,大家可以看一下官方文档;接下来我们看一下配置文件是如何设置的吧~
# PageHelper分页插件
pagehelper:
# 方言:即目标数据库类型
helperDialect: mysql
# 分页合理化参数,默认值为false。当该参数设置为 true 时,pageNum<=0 时会查询第一页, pageNum>pages(超过总数时),会查询最后一页。默认false 时,直接根据参数进行查询
reasonable: true
# 支持通过 Mapper 接口参数来传递分页参数,默认值false
supportMethodsArguments: true
# 配合reasonable食用
params: count=countSql
这里特别说明一下,supportMethodsArguments
和 params
参数;
supportMethodsArguments
: 作用就是讲分页参数(如起始页,末页,排序方式等参数)放进对象中直接使用,就不用我们来传参数;
params
: 设置了哪些参数,这些参数就可以在对象中添加
其他更多配置,大家要自己去官方文档,这里只是冰山一角
3.2 插件的使用
一般我们在查询功能部分中添加分页效果,这里我们用 web.controller.system.SysConfigController 的
list()
获取参数配置列表方法来讲解
这里的startPage()
就是开启分页和设置请求分页数据,我们点进去looklook
protected void startPage()
{
PageDomain pageDomain = TableSupport.buildPageRequest();
Integer pageNum = pageDomain.getPageNum();
Integer pageSize = pageDomain.getPageSize();
if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
{
//驼峰转换
String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
PageHelper.startPage(pageNum, pageSize, orderBy);
}
}
其中是有关分页的参数,如起始页、末页和排序方法等
3.3 分页代码详解
上面说明了如何使用,这一小节就来说说其中各部分的作用
buildPageRequest()
: 该方法调用了getPageDomain()
,获取了前记录起始索引,每页显示记录数等等属性(这些都封装在TableSupport和PageDomain中),然后封装在PageDomain对象中escapeOrderBySql(pageDomain.getOrderBy())
: 这里是讲驼峰转换为下划线;还记得前面嘛?就是mapper文件中,我们从数据库获取数据是将下划线转换成驼峰,这里是将驼峰转换为下划线返回数据库,然后等到相应的分页数据
需要注意的是,加上
startPage()
,则只对下一条能执行的查询方法有效!具体有两个坑点,大家可以看一下若依的官方文档