什么是查询缓存?查询缓存的作用?
Mybatis提供查询缓存,在特定条件下使用相同的语句查询数据库,为了减少数据库的连接次数,减小数据库的访问压力以及提高查询效率,MyBatis不会重新查询数据库,而是选择从缓存中拿出相应的结果。MyBatis提供一级查询缓存和二级查询缓存,也允许使用其他缓存。
MyBatis一级查询缓存
作用域:SqlSession
默认设置:在MyBatis中,一级查询缓存默认开启,且不能关闭。
实现方法:
使用一个HashMap实现一级查询缓存
key:HashCode+sql语句的ID+sql语句
| value:该sql语句第一次查询获得的结果
|
清空时机:
1.SqlSession关闭时,一级查询缓存清空
2.当对数据库进行了增删改的操作时,为了保证之后查询结果的正确性,一级查询缓存清空
MyBatis二级查询缓存
作用域:整个应用
使用二级查询缓存的步骤:
1.查询结果映射的pojo对象需要实现序列化即实现 Serializable接口,若该类有父类,父类也必须实现该接口。
2.在mapper映射文件中添加<cache/>标签
3.在主配置文件中添加设定,可以省略,因为二级查询缓存默认开启
<setting name="cacheEnabled" value="true"/>
实现方法与一级查询缓存类似,二级查询缓存不是为了共享对象的信息,而是为了延长缓存信息的生命周期,提高效率、
清空时机:
1.应用关闭时
2.对数据库进行了增删改查操作
二级查询缓存的关闭
1.全局关闭,即整个项目不使用二级查询缓存
<setting name="cacheEnabled" value="false"/>
2.局部关闭,只关闭某个select标签的二级查询缓存
将select标签中的useCache属性改为false
什么时候使用开启二级查询缓存?
当查询操作明显频繁与增删改操作时,并且只允许在单表中使用二级查询缓存,只能在一个命名空间中使用二级缓存。