查询缓存
mybatis提供查询缓存,用来减轻数据压力,提高数据库性能。
mabatis缓存级别
- 一级缓存
每个sqlsession中缓存,当第二次查询时,从第一次查询结果的缓存中获取,针对单一客户。 - 二级缓存
跨整个sqlsession,针对所有客户。
一级缓存
实例:根据顾客id查询顾客信息
①接口方法
②xml实现
测试情形一:两次查询相同内容
③测试方法
测试方法优化(使用@Before 与 @After注解)
注:在test运行时会最先调用@Before注释的方法,最后调用@After注解的方法
④测试结果
分析:两次查询相同的内容,在第一次查询时执行了SQL语句,在分割线下面直接出结果,没有进行SQL查询。第二次查询时从缓存中获取查询结果。
测试情形二:两次查询不同内容
③测试方法
④测试结果
分析:两次查询不同内容,在第一次查询时执行了SQL语句,在分割线下面第二次查询也执行SQL语句。第二次查询时从缓存中没有获取到查询结果,进行了再一次的查询。
测试情形三:创建两个SqlSession,两次查询相同内容
③测试方法
④测试结果
分析:两次查询相同内容,因为用到不同的sqlsession。在第一次查询时执行了SQL语句,在分割线下面第二次查询也执行SQL语句。
结论:一级缓存无需任何配置,默认就是生效的。
二、二级缓存
二级缓存默认情况是关闭的,需要手动开启。
① 在mybatis全局配置文件中打开缓存总开关
② 在指定的mapper中使用来开启二级缓存
③让二级缓存的对象Entity(POJO)实现序列化接口
实例测试:执行一级缓存中的测试方法三(两个sqlsession查询相同的顾客信息)
测试结果:仅进行一次查询
④ 刷新缓存
在xml中进行配置
三、第三方二级缓存oscache
①导入jar包
②添加二级缓存配置文件(新建oscache配置文件oscache.properties)
③修改mapper文件中,添加type属性来指向对象二级缓存的支撑类
④在实例实现DiskPersistenceListener接口