PageHelper介绍:
pagehelper是mybatis 提供的分页插件,支持Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL数据库等等。
适用场景:
列表中搜索列表、上一页下一页、跳转到某一页、修改每页显示的条数等等........
使用实例
1、首先在pom文件中引入依赖
<!--pageHelper坐标-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.4.6</version>
</dependency>
2、如果响应数据要求返回一个总条数和当前页的数据集合,我们可以定义一个实体类PageBean
@Data
@NoArgsConstructor
@AllArgsConstructor
public class PageBean <T>{
private Long total;//总条数
private List<T> items;//当前页数据集合
}
3、在controller层中使用(参数中PageBean中的泛型是将来我们当前页的数据集合里面的每一条数据的类型是什么)
请求参数:
service层会返回一个PageBean对象
@GetMapping
public Result<PageBean<Article>> list(
Integer pageNum,Integer pageSize,
@RequestParam(required = false) Integer categoryId,@RequestParam(required = false) String state
){
PageBean pb = articleService.list(pageNum,pageSize,categoryId,state);
return Result.success(pb);
}
4、在serviceImpl中
1、创建PageBean对象
2、开启分页查询 使用pagehelper的startPage方法
3、调用mapper
//条件分页列表查询
@Override
public PageBean<Article> list(Integer pageNum, Integer pageSize, Integer categoryId, String state) {
PageBean<Article> pb = new PageBean();
PageHelper.startPage(pageNum,pageSize); //自动把pageNum和pageSize拼接到sql语句limit后面
Map<String,Object> map = ThreadLocalUtil.get();
Integer userId = (Integer) map.get("id"); //只能获取当前用户创建的文章列表
List<Article> as = articleMapper.list(userId,categoryId,state);
//Page中提供了方法,可以获取PageHelper分页查询后 得到的总记录条数和当前页数据
Page<Article> p = (Page<Article>) as;
//把数据填充到我们的pageBean对象中
pb.setTotal(p.getTotal());
pb.setItems(p.getResult());
return pb;
}
5、mapper层
//条件分页列表查询
List<Article> list(Integer userId, Integer categoryId, String state);
因为前端传来的参数不是必须的,所以我们采用xml映射配置文件的方式
<!--动态sql-->
<select id="list" resultType="com.itheima.pojo.Article">
select * from article
<where>
<if test="categoryId!=null">
category_id=#{categoryId}
</if>
<if test="state!=null">
and state=#{state}
</if>
and create_user=#{userId}
</where>
</select>