>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 28267 个阅读者 刷新本主题
 * 贴子主题:  深入理解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开发-->开发JavaMail Web应用
  JSP与Hibernate开发-->映射对象标识符
  Java网络编程-->Socket用法详解
  精通Spring-->通过Axios访问服务器
  Vue3开发-->Vue组件开发高级技术
  Redis为什么单线程能够支持高并发
  Mybatis常见注解有哪些?
  如何编写优雅的Spring架构API
  微服务架构模型
  Spring MVC的拦截器的详细用法
  Spring MVC关于分页的简单实现
  阿里JAVA面试题剖析:Redis 和 memcached 有什么区别?
  什么是Redis?Redis的各项功能解决了哪些问题?
  Redis用作消息队列
  使用 Flask-RESTful 设计 RESTful API
  另一种缓存,Spring Boot 整合 Ehcache
  浓缩精华的架构演进过程,经验总结,值得收藏!
  微服务中的Kafka与Micronaut
  Java-CORBA
  Spring与MyBatis整合
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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