mohのAI正在绞尽脑汁想思路ING···
mohのAI摘要
mohのAI-Lite

MyBatis-Plus 自动分页(三步核心笔记)

步骤一: service层必须创建Page

1
2
3
4
public Page<SesStuEval> listPage(int currentPage ,int pageSize,SesStuEvalPageParam param) {
Page<SesStuEval> page = new Page<>(pcurrentPage, pageSize);
return sesStuEvalMapper.listPage(page, param);
}

核心要点

  • 必须通过new Page<>(current,size)创建分页对象
  • currentPage:当前页码(从1开始)
  • pageSize:每页数据条数
  • Ser’vice层服务初始化分页参数

步骤二:Mapper 必须接受Page

1
2
3
4
Page<SesStuEval> listContainTopicPage(
@Param("page") Page<SesStuEval> page,
@Param("param") SesStuEvalPageParam param
);

核心要点

  • 方法第一个参数必须是 Page<T>类型
  • 返回值类型也必须是 Page<T>
  • 建议通过 @Param明确指定参数名称
  • Page 对象会”透传”到 SQL 层

步骤三:XML 只写普通 SQL(不写分页)

1
2
3
4
5
6
7
8
9
10
<select id="listContainTopicPage" resultType="com.xxx.SesStuEval">
SELECT *
FROM ses_stu_eval
<where>
<if test="param.xxx != null">
AND xxx = #{param.xxx}
</if>
</where>
ORDER BY create_time DESC
</select>

核心要点

  • 严禁在 SQL 中写 LIMIT分页
  • 严禁手动拼接分页逻辑
  • 只需编写正常的业务查询语句
  • MyBatis-Plus 会自动在运行时添加分页条件

三大核心原则(必记)

Service 必须传 Page

1
2
3
4
5
6
7
//  正确
Page<SesStuEval> page = new Page<>(param.getCurrent(), param.getSize());

// 错误
// 1. 不创建 Page
// 2. 创建 Page 但不传分页参数
// 3. 传了 Page 但页码/条数不正确

Mapper 必须带 Page

1
2
3
4
5
6
7
// 正确
Page<SesStuEval> method(Page<SesStuEval> page, @Param("param") Object param);

// 错误
// 1. 参数中没有 Page
// 2. Page 参数不在第一位
// 3. 返回值类型是 List 而不是 Page

XML 不写 LIMIT

1
2
3
4
5
6
7
-- 正确写法
SELECT * FROM table WHERE condition ORDER BY create_time;

-- 错误写法
SELECT * FROM table WHERE condition
ORDER BY create_time
LIMIT 0, 10; -- 禁止手动分页

【哲风壁纸】夜景-富士山