主题
面试速答(先看这里)
**一句话结论:**PageHelper会在执行器的query方法执行之前,会从ThreadLocal中再获取分页参数信息,页码和页大小,然后执行分页算法,计算需要返回的数据块的起始位置和大小。
60秒标准回答:
PageHelper是MyBatis中提供的分页插件,主要是用来做物理分页的
当我们在代码中使用 PageHelper.startPage(int pageNum, int pageSize) 设置分页参数之后,其实PageHelper会把他们存储到ThreadLocal中
PageHelper会在执行器的query方法执行之前,会从ThreadLocal中再获取分页参数信息,页码和页大小,然后执行分页算法,计算需要返回的数据块的起始位置和大小。最后, PageHelper会通过修改SQL语句的方式,在SQL后面动态拼接上limit语句 ,限定查询的数据范围,从而实现物理分页的效果。并且在查询结束后再清除ThreadLocal中的分页参数
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**PageHelper是MyBatis中提供的分页插件,主要是用来做物理分页的。
- **要点2:**当我们在代码中使用 PageHelper.startPage(int pageNum, int pageSize) 设置分页参数之后,其实PageHelper会把他们存储到ThreadLocal中。
**记忆锚点:**PageHelper → ThreadLocal → int → SQL → PageHelperstartPage → pageSize
追问准备:
- 围绕「PageHelper」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「ThreadLocal」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「int」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
PageHelper是MyBatis中提供的分页插件,主要是用来做物理分页的。
当我们在代码中使用PageHelper.startPage(int pageNum, int pageSize)设置分页参数之后,其实PageHelper会把他们存储到ThreadLocal中。
PageHelper会在执行器的query方法执行之前,会从ThreadLocal中再获取分页参数信息,页码和页大小,然后执行分页算法,计算需要返回的数据块的起始位置和大小。最后,PageHelper会通过修改SQL语句的方式,在SQL后面动态拼接上limit语句,限定查询的数据范围,从而实现物理分页的效果。并且在查询结束后再清除ThreadLocal中的分页参数。
