深入理解Mybatis二级缓存

 更新时间:2016年12月20日 17:25:35   作者:我要这铁棒有何用  
与一级缓存相比,二级缓存范围更大了一些,可以被多个SqlSession所共用。下面通过本文带领大家一起学习mybatis二级缓存知识,一起看看吧

上篇文章给大家介绍了mybatis一级缓存,有需要的朋友可以参考下。

与一级缓存相比,二级缓存范围更大了一些,可以被多个SqlSession所共用。

同样是发送同样的查询sql会先去缓存中找,找不到再去查询数据库。

每个namespace的mapper都会有自己的一个缓存的空间。

如果两个mapper的namespace相同,执行mapper查询到的数据将存储到相同的二级缓存.

同样如果有sqlSession执行了commit 会清空二级缓存.

配置文件(不用配置也是默认开启的):

在sqlMapConfig.xml中:

<setting name="cacheEnabled" value="true"/> 

在相应的mapper.xml中:

<cache/>

如果不需要二级缓存,可以在设置禁用二级缓存

<select useCache="false"></select>

这样每次都是从数据库中读取

在执行insert,update,delete后会刷新缓存(清空缓存),可以设置不刷新

一般不予设置,设置可能会导致脏读.

<insert flushCache="false"></insert>

小例子:

SqlSession session1 = factory.openSession();
   SqlSession session2 = factory.openSession();
   SqlSession session3 = factory.openSession();
   UserMapper mapper1 = session1.getMapper(UserMapper.class);
   UserMapper mapper2 = session2.getMapper(UserMapper.class);
   UserMapper mapper3 = session3.getMapper(UserMapper.class);
   //第一次请求,查询id为1的用户
   User user1 = mapper1.findUserById(1);
   System.out.println(user1);
   //close 将数据写入二级缓存
   session1.close();
   //清空二级缓存,UserMapper下的
   user1.setUsername("mmm");
   mapper3.updateUser(user1);
   session3.commit();
   //第二次查询会从缓存中找
   User user2 = mapper2.findUserById(1);
   System.out.println(user2);
   session2.close();

注意此处要进行二级缓存的对象必须实现Serilizable接口,因为这些缓存数据可能会反序列化写到硬盘或者其他地方。

以上所述是小编给大家介绍的Mybatis二级缓存,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • java Springboot对接开发微信支付详细流程

    java Springboot对接开发微信支付详细流程

    最近要做一个微信小程序,需要微信支付,所以研究了下怎么在java上集成微信支付功能,下面这篇文章主要给大家介绍了关于java Springboot对接开发微信支付的相关资料,需要的朋友可以参考下
    2024-08-08
  • springboot从application.properties中注入list, map方式

    springboot从application.properties中注入list, map方式

    这篇文章主要介绍了springboot从application.properties中注入list,map方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • ConcurrentHashMap是如何实现线程安全的你知道吗

    ConcurrentHashMap是如何实现线程安全的你知道吗

    这篇文章主要介绍了ConcurrentHashMap是如何实现线程安全的你知道吗,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-10-10
  • Java SpringCache+Redis缓存数据详解

    Java SpringCache+Redis缓存数据详解

    本篇文章主要介绍了浅谈SpringCache与redis缓存数据的解决方案,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-10-10
  • MyBatis的foreach语句详解

    MyBatis的foreach语句详解

    这篇文章主要介绍了MyBatis的foreach语句详解的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • SpringBoot yaml中的数组类型取值方式

    SpringBoot yaml中的数组类型取值方式

    这篇文章主要介绍了SpringBoot yaml中的数组类型取值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • Spring Cloud Stream与Kafka集成步骤(项目实践)

    Spring Cloud Stream与Kafka集成步骤(项目实践)

    Spring Cloud Stream是一个用于构建消息驱动微服务的框架,它是基于Spring Boot和Spring Integration创建的,旨在简化与消息中间件的集成工作,本教程介绍了如何结合Spring Cloud Stream框架和Apache Kafka消息代理,创建一个集成示例应用,感兴趣的朋友一起看看吧
    2025-08-08
  • Nacos+Spring Cloud Gateway动态路由配置实现步骤

    Nacos+Spring Cloud Gateway动态路由配置实现步骤

    Nacos最近项目一直在使用,本文通过gateway、nacos-consumer、nacos-provider三个简单模块来展示:Nacos下动态路由配置,,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • Java后端服务间歇性响应慢的问题排查与解决

    Java后端服务间歇性响应慢的问题排查与解决

    之前在公司内其它团队找到帮忙排查的一个后端服务连接超时问题,问题的表现是服务部署到线上后出现间歇性请求响应非常慢(大于10s),但是后端业务分析业务日志时却没有发现慢请求,所以本文给大家介绍了Java后端服务间歇性响应慢的问题排查与解决,需要的朋友可以参考下
    2025-03-03
  • Java 语言守护线程 Daemon Thread使用示例详解

    Java 语言守护线程 Daemon Thread使用示例详解

    这篇文章主要为大家介绍了Java 语言守护线程 Daemon Thread使用示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10

最新评论