简述PageHelper的原理及使用
简述PageHelper的原理及使用
PageHelper原理
PageHelper是MyBatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句,最终实现分页查询功能。
在调用dao的Service的方法中设置分页参数:PageHelper.startPage(page,size),分页参数会设置在ThreadLocal
中然后PageHelper会在mybatis执行SQL时进行拦截,从ThreadLocal取出分页参数,修改当前执行的SQL语句,添加分页SQL,最后执行添加了分页sql的sql语句实现分页查询。
PageHelper使用
导入pom坐标
1 | <dependency> |
接口设计
基本信息:
Path:/admin/employee/page
Method:Get
接口描述
Query
参数名称 | 是否必须 | 示例 | 备注 |
---|---|---|---|
name | 否 | 张三 | 姓名 |
page | 是 | 1 | 页码 |
pageSize | 是 | 10 | 每页记录数 |
创建DTO封装接口参数
1 | //该类用来封装前端传递过来的参数 |
将所有分页查询的结果统一封装成PageResult对象。为什么?方便返回给前端
1 | /** |
Controller层代码实现
1 |
|
Service层代码实现
1 | public PageResult pageQuery(EmployeePageQueryDTO employeePageQueryDTO) { |
DAO层代码实现
因为涉及到模糊查询所以dao层的sql语句写在xml文件中会更加灵活
在EmployeeMapper.java文件中代码实现如下:
1 | Page<Employee> pageQuery(EmployeePageQueryDTO employeePageQueryDTO); |
在EmployeeMapper.xml文件中代码实现如下:
1 | <select id="pageQuery" resultType="com.sky.entity.Employee"> |
测试结果
首先看到初始的数据表中有如下记录
在不添加name的查询条件的时候,测试接口确实成功实现查询到了正确的数据,但是可以看到返回结果中时间类型的数据返回格式是不适合前端展示的
解决方式:
方式一:在属性上加入注解,对日期进行格式化
1
2
private LocalDateTime updateTime;方式二:在WebMvcConfiguration 中拓展 SpringMVC 的消息转换器,统一对日期类型进行格式化处理
1
2
3
4
5
6
7
8
9
10
11
12
13
14/**
* 扩展mvc框架的消息转换器
* @param converters
*/
protected void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
log.info("扩展消息转换器...");
//创建一个消息转换器对象
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
//需要为消息转换器,创建一个对象转换器,对象转换器可以将Java对象序列化为JSON数据
messageConverter.setObjectMapper(new JacksonObjectMapper());
//将自己的消息转换器加入到容器中
converters.add(0,messageConverter);
}
根据上述的两种方式选择自己喜欢的方式即可,不过大多数情况下建议使用第二种方式,但是使用第二种方式的时候对象转换器又是什么呢?下面给出一个Jackson的对象转换器作为参考
1 | /** |
有了上述的知识基础,创建一个消息转换器并使用,然后重新启动服务进行测试
可以看到此时前端接收到的数据就是比较适合使用的时间格式
- 标题: 简述PageHelper的原理及使用
- 作者: 忘记中二的少年
- 创建于 : 2023-10-03 12:00:00
- 更新于 : 2023-10-31 20:52:04
- 链接: https://github.com/HandsomeXianc/HandsomeXianc.github.io/2023/10/03/PageHelper原理使用及/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。