PageHelper分页插件应用
一、分页插件原理
Mybatis给开发者提供了一个拦截器接口,只要实现了该接口,就可以在Mybatis执行SQL前,作一些自定义的操作。分页插件就是在此基础上开发出来的,对于一个需要分页的SQL,插件会拦截并生成两段SQL。举一个简单的例子
// 原SQL
select * from table where a = '1'
// 拦截后的
# 1.查询总数SQL:
select count(1) from table where a = '1'
# 2.分页SQL:
select * from table where a = '1' limit 0,10
这样我们只需要根据业务逻辑开发原SQL,不需关心分页语法对原SQL的影响,拦截器已经为我们处理好了
二、实现步骤
1.在SpringBoot 的pom文件中引入分页插件的依赖
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
如果出现以下报错:
这里说明你现在使用的PageHelper 依赖版本过低,往高提版本就可以
2.修改业务逻辑层分页方法
2.1原始方法
Service层
//查询符合条件的总条数
Long total = empMapper.selectCount(name, gender, begin, end);
//查询符合条件的集合
Integer start = (page - 1) * pageSize;
List<Emp> rows = empMapper.selectPage(name, gender, start, pageSize, begin, end);
PageBean<Emp> pageBean = new PageBean<>(total, rows);
mapper / dao层
//查询符合条件的总条数
Long selectCount(String name, Integer gender, LocalDate begin, LocalDate end);
//查询符合条件的集合
List<Emp> selectPage(String name, Integer gender, Integer start, Integer pageSize, LocalDate begin, LocalDate end);
XXXmapper.xml
//查询符合条件的集合
<select id="selectPage" resultType="com.pw.tlias.pojo.Emp">
select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time
from emp
<where>
<if test="name != null and name != ''">
and name like concat('%',#{name},'%')
</if>
<if test="gender != null">
and gender = #{gender}
</if>
<if test="begin != null and end != null">
and entrydate between #{begin} and #{end}
</if>
</where>
limit #{start},#{pageSize}
</select>
//查询符合条件的总条数
<select id="selectCount" resultType="java.lang.Long">
select count(1) emp_count
from emp
<where>
<if test="name != null and name != ''">
and name like concat('%',#{name},'%')
</if>
<if test="gender != null">
and gender = #{gender}
</if>
<if test="begin != null and end != null">
and entrydate between #{begin} and #{end}
</if>
</where>
</select>
原始方法代码复杂
2.2使用分页插件提供的方法
Service层
// 分页插件分页
// 设置分页参数
PageHelper.startPage(page,pageSize);
// PageHelper.startPage() 后直接跟查询语句
List<Emp> emps = empMapper.selectPage(name, gender, begin, end);
// Page 就是分页包装的结果对象
Page<Emp> p = (Page<Emp>) emps;
// 封装数据
PageBean<Emp> pageBean = new PageBean<>(p.getTotal(),p.getResult());
mapper / dao层
List<Emp> selectPage(String name,Integer gender,LocalDate begin,LocalDate end);
XXXmapper.xml文章来源:https://www.toymoban.com/news/detail-847714.html
<select id="selectPage" resultType="com.pw.tlias.pojo.Emp">
select id, username, password, name, gender, image, job, entrydate, dept_id, create_time, update_time
from emp
<where>
<if test="name != null and name != ''">
and name like concat('%',#{name},'%')
</if>
<if test="gender != null">
and gender = #{gender}
</if>
<if test="begin != null and end != null">
and entrydate between #{begin} and #{end}
</if>
</where>
</select>
附加
文章来源地址https://www.toymoban.com/news/detail-847714.html
到了这里,关于SpringBoot分页插件(PageHelper)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!