>>分享流行的Java框架以及开源软件,对孙卫琴的《精通Spring》、《Spring Cloud Alibaba微服务开发零基础入门到实操》提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 29207 个阅读者 刷新本主题
 * 贴子主题:  深入理解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与Hibernate开发-->数据库事务的并发问题的解决方案
  Java网络编程-->ServerSocket用法详解
  精通Spring-->Vue组件开发高级技术
  Vue3开发-->通过Vuex进行状态管理
  VSCode插件的高级用法
  git 常用指令总结
  Spring MVC记录日志的三种方式
  Spring MVC实现国际化的几种方式
  Spring配置中bean元素的id和name属性的区别
  【项目实践】使用Vue.js和ElementUI快速实现后台管理系统的界...
  @ModelAttribute注解用法详解
  Redis solr一二事 - 在spring中使用jedis 连接调试单机redi...
  国内 Java 开发者必备的两个神器:Maven国内镜像和Spring国内...
  Spring+JPA+ehcache开启二级本地缓存
  Kafka笔记整理
  使用idea和gradle编译spring5源码
  一份Spring Boot核心知识清单
  微架构 springcloud-07. springboot-静态资源处理
  MyBatis解析和运行原理
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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