1. 在 sql 中使用 limit 进行分页查询

用法:LIMIT [offset,] rows

1
SELECT * FROM article LIMIT 10, 10

offset 是相对于首行的偏移量(首行是 0),rows 是返回条数
mapper 中可以传变量,即在实际使用的时候 offset 与 rows 可以用变量替代

2. 使用第三方库进行分页查询

编写PageBean

1
2
3
4
5
6
7
8
9

@Data
@AllArgsConstructor
@NoArgsConstructor
public class PageBean<T> {
private Long total;
private List<T> items;
}

编写分页查询的路径

1
2
3
4
5
6
7
8
9

@GetMapping
public Result<PageBean<Article>> list(Integer pageNum,Integer pageSize,
@RequestParam(required = false)String categoryId,
@RequestParam(required = false)String state){
PageBean<Article> bean=articleService.list(pageNum,pageSize,categoryId,state);
return Result.success(bean);
}

处理数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

@Override
public PageBean<Article> list(Integer pageNum, Integer pageSize, String categoryId, String state) {
PageBean<Article> page = new PageBean<>();
// 设置第几条记录开始,多少页记录为一页
PageHelper.startPage(pageNum,pageSize);
Map<String,Object> map = ThreadLocalUtil.get();
Integer userId =(Integer) map.get("id");
// 因为已经注册了 PageHelper插件,所以 PageHelper会在原 sql 语句上增加 limit,从而实现分页
List<Article> list = articleMapper.list(userId,categoryId,state);
Page<Article> p = (Page<Article>) list;
page.setTotal(p.getTotal());
page.setItems(p.getResult());
return page;
}

mapper

1
2
3
4
5
6
7
8
9
10
11
12
13
14

<select id="list" resultMap="All">
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>