赞
踩
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的影响,拦截器已经为我们处理好了
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.2</version>
</dependency>
如果出现以下报错:
这里说明你现在使用的PageHelper 依赖版本过低,往高提版本就可以
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>
原始方法代码复杂
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
<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>
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。