HashMap相关问题
Mybatis框架相关问题
- 一、MyBatis框架是如何实现分页的?
- 二、MyBatis框架里面的缓存机制是怎么回事?
- 一级缓存
- 二级缓存
一、MyBatis框架是如何实现分页的?
分页分为两种:
- 逻辑分页:将所有数据查询出来,再在内存中进行分页处理;
- 物理分页:直接在数据库中进行分页;
具体实现:
- 1、自己写SQL进行分页;(物理分页)
- 2、使用拦截器进行分页;(物理分页)
- 3、使用PageHelper进行分页;(物理分页)
- 4、使用RowBounds进行分页;(逻辑分页)
二、MyBatis框架里面的缓存机制是怎么回事?
MyBatis中有两级缓存:一级缓存 和 二级缓存;
一级缓存
1、一级缓存是SqlSession
级别的缓存, 通过同一个SqlSession
查询的数据会被缓存,下次查询相同的数据,就会从缓存中直接获取,不会再从数据库查询;
2、一级缓存是默认开启的,是不能关闭的,但可以调用SqlSession的clearCache()
方法清理缓存;
3、不同SqlSession之间的缓存数据是隔离的,即一个SqlSession中的缓存数据在另一个SqlSession中是读取不到的;
4、一级缓存的作用范围可以配置两种:
local-cache-scope: statement
—— 一级缓存失效local-cache-scope: session
—— 默认
一级缓存失效的几种情况:
1、不同的SqlSession对应不同的一级缓存;
2、同一个SqlSession但是查询条件不同;
3、同一个SqlSession两次查询期间执行了任何一次增删改操作;
4、同一个SqlSession两次查询期间手动清空了缓存;
二级缓存
二级缓存在SqlSession提交或关闭后才生效;
二级缓存默认是关闭的,开启二级缓存,需要同时有如下两项:
application.yml
mybatis:
configuration:
cache-enabled: true
Mapper.xml
<cache/>
-
二级缓存是跨
SqlSession
的,多个SqlSession
可以共用同一个二级缓存; -
二级缓存是
mapper
级别的缓存,根据mapper
的namespace
区分,两个mapper
的namespace
相同,则这两个mapper
执行 sql 查询到的数据将缓存到相同的二级缓存区域中; -
使用二级缓存的 POJO 类要实现
Serializable
接口;