1.MyBatis框架是如何实现分页的?
分页分为两种:
逻辑分页:将所有数据查询出来,再在内存中进行分页处理;
物理分页:直接在数据库中进行分页;
具体实现:
1.自己写SQL进行分页;(物理分页)
2.使用拦截器进行分页;(物理分页)(用的比较少)
3.使用PageHelper进行分页;(物理分页)
4.使用RowBounds进行分页;(逻辑分页)(用的很少)
2.MyBatis框架里面的缓存机制是怎么回事?
MyBatis中有两级缓存:一级缓存 和 二级缓存;
小Tip
- pageContext:用来在同一个页面的不同标签之间传递数据。
- request:在同一个请求过程中间传递数据。
- session: 同一个浏览器窗口的不同请求之间传递数据。
- application:所有用户共享的数据,并且长久频繁使用的数据。
第4个中的是 一级缓存的作用范围可以配置两种
- 如果使用 local-cache-scope:statement 一级缓存是会失效的(不配置默认是session)
1.一级缓存失效的几种情况
2.一级缓存的小坑
加上@Transactional 会使两次查询使用一个sqlsession
两次查询之间有跟新操作的话
但是如果你第二次查询又想想拿到最新数据的话要注意一下,遇到拿不到最新数据的话记得考虑这一点。
- 多个sqlsession共享一个二级缓存
- 注意一下 cache标签的位置
- pojo类如果不实现Serializable接口是不能使用二级缓存的