# MyBatis 框架如何实现分页
分页分为两种
- 逻辑分页:将所有数据查出来,再在内存中进行分页处理
- 物理分页:直接在数据库中进行分页
具体实现:
- 自己写 SQL 进行分页 (物理)
- 使用拦截器进行分页 (物理)
- 使用 PageHelper 进行分页 (物理)
- 使用 RowBounds 进行分页 (逻辑)
# MyBatis 框架里面的缓存机制
MyBatis 中有两级缓存:一级缓存,二级缓存 (都是 HashMap)
一级缓存失效的几种情况
- 不同的 SqlSession 对应不同的一级缓存
- 同一个 SqlSession 但是查询条件不同
- 同一个 SqlSession 两次查询期间执行了任何一次增删改操作
- 同一个 SqlSession 两次查询期间手动清空了缓存
二级缓存
在 SqlSession 关闭 (即 DAO 操作) 后将内容写入二级缓存
二级缓存默认关闭,开启二级缓存,需要同时有如下两项
application.yml
mybatis:
configuration:
cache-enable:true
Mapper.xml
<cache/>
二级缓存是跨 SqlSession, 多个 SqlSession 可以共用同一个二级缓存;
二级缓存是 mapper 级别的缓存,根据 mapper 的 namespace 区分,两个 mapper 的 namespace 相同