>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 27152 个阅读者 刷新本主题
 * 贴子主题:  深入理解Mybatis一级缓存 回复文章 点赞(0)  收藏  
作者:日月光华    发表时间:2020-07-10 01:48:52     消息  查看  搜索  好友  邮件  复制  引用

深入理解Mybatis一级缓存

客户端向数据库服务器发送同样的sql查询语句,如果每次都去访问数据库,会导致性能的降低,那么怎么提高呢?下面小编给大家分享下mybatis为我们提供了一级缓存的策略
客户端向数据库服务器发送同样的sql查询语句,如果每次都去访问数据库,会导致性能的降低。
那么怎么提高呢?
mybatis为我们提供了一级缓存的策略
在一个sqlSession开启和关闭之间,sqlSession对象内部(其实是Executor)会维护一个缓存的对象,当查询数据时候,先从缓存中寻找是否存在该条数据,存在就直接取出来,不存在,向数据库发送sql查询, 然后将查询后的数据存入缓存,和返回给程序。
这样会存在一个问题:
如果在第一次和第二次查询期间,有程序更改了要查讯的数据库的数据,就会引起读取的数据是错误的,也就是
脏读,其实是mybatis在sqlSession执行commit()方法后会清空这个缓存。第二次去查询,依然会从数据库中查询.
也可以手动调用sqlSession的clearCache()方法清除缓存
小例子:
@Test
  public void testCacheLever1() throws Exception{
    SqlSession session = factory.openSession();
    UserMapper mapper = session.getMapper(UserMapper.class);
    //第一次请求,查询id为1的用户
    User user = mapper.findUserById(1);
    System.out.println(user);
    //更改数据,会清空缓存
    user.setUsername("yyyy");
    mapper.updateUser(user);
    session.commit();
    //第二次查询会从缓存中找
    User user2 = mapper.findUserById(1);
    System.out.println(user2);
    session.close();
  }

以上所述是小编给大家介绍的Mybatis一级缓存,希望对大家有所帮助.


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->对象的生命周期
  JavaWeb开发-->JSP技术详解(Ⅰ)
  JSP与Hibernate开发-->数据库事务的概念和声明
  Java网络编程-->XML数据处理
  精通Spring-->Vue CLI脚手架工具
  Vue3开发-->通过Axios访问服务器
  推荐一本微服务开发经典书籍《Spring Cloud Alibaba微服务开...
  Maven 镜像地址大全
  NIO的几道常见面试题
  超全Redis命令总结,墙裂建议收藏,说不定就用上了呢
  卫琴姐姐制作的最新视频课程:基于Spring的JavaWeb开发技术详...
  WebFlux 响应式编程初体验
  Spring MVC SSE服务器端推送
  SSM三大框架整合详细教程
  Spring Data JPA详解
  解析配置文件 redis.conf、Redis持久化RDB、Redis的主从复制
  Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)...
  RESTful API的最佳设计原则
  理解 RESTful 风格的 API
  Java软件架构设计七大原则
  写给新手的Spring Cloud的微服务入门教程
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。