主题
面试速答(先看这里)
**一句话结论:**MyBatis的RowBounds是一个用于分页查询的简单POJO类,它包含两个属性offset和limit,分别表示分页查询的偏移量和每页查询的数据条数。
60秒标准回答:
MyBatis的RowBounds是一个用于分页查询的简单POJO类,它包含两个属性offset和limit,分别表示分页查询的偏移量和每页查询的数据条数
在使用RowBounds进行逻辑分页的时候,我们的SQL语句中是不需要指定分页参数的。 就正常的查询即可,如
然后,在查询的时候,将RowBounds当做一个参数传递
**答题顺序:**结论 → 原理/机制 → 关键流程 → 场景与取舍 → 易错点
回答主线:
- **要点1:**在使用RowBounds进行逻辑分页的时候,我们的SQL语句中是不需要指定分页参数的。
- **要点2:**然后,在查询的时候,将RowBounds当做一个参数传递:
- **要点3:**这样,实际上在查询的时候,将会先所有符合条件的记录返回,然后再在内存中进行分页,分页的方式是根据RowBounds中指定的offset和limit进行数据保留,即抛弃掉不需要的数据再返回。
**记忆锚点:**RowBounds → offset → limit → 当做一个参数传递 → MyBatis → POJO
追问准备:
- 围绕「RowBounds」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「offset」:底层原理是什么?使用时有哪些边界和常见坑?
- 围绕「limit」:底层原理是什么?使用时有哪些边界和常见坑?
- 如果线上出现异常,你会如何定位、验证并规避?
典型回答
MyBatis的RowBounds是一个用于分页查询的简单POJO类,它包含两个属性offset和limit,分别表示分页查询的偏移量和每页查询的数据条数。
**在使用RowBounds进行逻辑分页的时候,我们的SQL语句中是不需要指定分页参数的。**就正常的查询即可,如:
plain
<select id="getUsers" resultType="User">
select * from user
<where>
<if test="name != null">
and name like CONCAT('%',#{name},'%')
</if>
</where>
order by id
</select>然后,在查询的时候,将RowBounds当做一个参数传递:
plain
int offset = 10; // 偏移量
int limit = 5; // 每页数据条数
RowBounds rowBounds = new RowBounds(offset, limit);
List<User> userList = sqlSession.selectList("getUserList", null, rowBounds);这样,实际上在查询的时候,将会先所有符合条件的记录返回,然后再在内存中进行分页,分页的方式是根据RowBounds中指定的offset和limit进行数据保留,即抛弃掉不需要的数据再返回。