PageHelper.startPage()
主要用于在 MyBatis 中实现 分页查询,它并不会直接修改 SQL 语句,而是通过 拦截器 动态地在查询语句中添加 LIMIT
子句(或其他数据库分页语法),实现分页的效果。
🔑 PageHelper.startPage()
的作用
PageHelper.startPage(setmealPageQueryDTO.getPage(), setmealPageQueryDTO.getPageSize());
这行代码会根据传入的页码 (page
) 和每页大小 (pageSize
) 启动分页,并且 不需要手动修改 SQL 查询语句。PageHelper
会自动在查询执行前插入分页相关的 SQL 语法。
🔑 工作原理
-
拦截器:
PageHelper
会在 SQL 执行之前通过拦截器动态地修改 SQL 语句,将分页条件(如LIMIT
)添加到查询中。- 例如,在 MySQL 中,它会将查询语句转变成类似于:SELECT * FROM setmeal LIMIT 0, 10;这表示从第
0
条记录开始,查询10
条数据。
-
自动分页:
- 你不需要手动在 SQL 中添加
LIMIT
或其他分页语法。只需要在查询之前调用PageHelper.startPage(page, pageSize)
,PageHelper
会自动处理。
- 你不需要手动在 SQL 中添加
假设你有一个查询接口,需要根据分页条件获取套餐数据:
PageHelper.startPage(setmealPageQueryDTO.getPage(), setmealPageQueryDTO.getPageSize());
List<Setmeal> setmeals = setmealMapper.selectListByPage(setmealPageQueryDTO);
- 这里
setmealPageQueryDTO.getPage()
表示当前页码,setmealPageQueryDTO.getPageSize()
表示每页显示的记录数。 PageHelper.startPage()
会修改查询语句,确保返回的是分页结果。
🔑 注意
PageHelper
对 SQL 的影响:PageHelper
主要是通过在查询语句中插入分页语法来完成分页的,它并不会修改你原本的 SQL 逻辑。- 查询后获取分页信息:分页查询结束后,可以通过
PageInfo
来获取分页的详细信息,如总页数、总记录数等。
🎯 总结
PageHelper.startPage()
是通过 拦截 SQL 来实现分页,不需要手动修改 SQL 语句。- 它会在 SQL 语句中自动加入分页条件(例如
LIMIT
)。 - 使用
PageInfo
可以方便地获取分页的详细信息。