1.懒加载:需要多表查询的时候一般使用分步的单表查询,因为会比关联查询效率高,而分步单表查询的时候有时候不需要某些表的关联信息时,为了优化就可以配置懒加载,(通常将懒加载设置为false,也就是不懒加载,立即抓取)。

2.一级缓存:sqlsession级缓存(默认开启的缓存)

特点:在同一个sqlSession连接下,对同一个sql语句进行查询时,第一次需要执行查询语句,而以后再需要进行相同的查询时,不需要再次进行sql语句查询的操作。在两个相同sql查询语句期间,如果对该表进行增删改的操作(java语句操作),那么该表缓存会清空。(需要注意是同一个连接对同一条sql语句进行查询,比如查询id为10的用户信息,在不关闭连接且用相同SqlSession连接再次进行查询id为10的用户信息的时候,不需要从数据库中查询,可以直接从连接中得到结果,此时称为一级缓存)。

3.二级缓存:数据缓存在代理类mapper中,多个sqlSession共享。默认关闭的。需要配置。

使用的缓存框架 ehcache. 步骤:
1. 引入jar包
2. 把ehcache.xml 缓存的配置文件加载到类路径的根目录下 src/

缓存搜索顺序:
每次查询先看是否开启了二级缓存,如果开启了二级缓存则直接从二级缓存的数据结构中取缓存数据,如果二级缓存中没有数据,再从一级缓存中找,如果一级缓存也没有,则在数据库中查询,并保存到相应级别的缓存中。

二级缓存:配置好二级缓存的文件后,一级缓存先进行连接,使用sqlSession1进行连接,查询id为10的用户信息后,使用sqlSession1.close();关闭连接后,将在配置好的文件位置生成缓存文件,即二级缓存,此时再使用sqlSession2连接,再次查询id为10的用户信息时,直接从二级缓存的数据中取出数据,不需要再次从数据库中查询,此时称为二级缓存。

@Testpublic void testUserOrder()throws IOException{SqlSession sqlSession1 = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();UserDao5 proxy = sqlSession1.getMapper(UserDao5.class);System.out.println("一一一");User user = proxy.getUserById(1);System.out.println(user);System.out.println("二二二");User user2 = proxy.getUserById(1);System.out.println(user2);//直接从一级缓存中获取数据,不需要从数据库中查询sqlSession1.close();//关闭连接后,变为二级缓存,存到相应的src路径下SqlSession sqlSession2 = SqlSessionFactoryUtils.getSqlSessionFactory().openSession();UserDao5 proxy2 = sqlSession2.getMapper(UserDao5.class);System.out.println("三三三");User user3 = proxy2.getUserById(1);System.out.println(user3);//再次进行查询的时候从二级缓存中获取数据,不需要从数据库中查询sqlSession2.close();}

mybatis的懒加载和缓存相关推荐

  1. mybatis懒加载与缓存

    在接触mybatis时我们会学到接触小知识,关于懒加载的一些知识点还是需要亲自去测试一下才能加深理解; mybatis懒加载与缓存 mybatis对缓存的支持 mybatis一级缓存 mybatis的 ...

  2. lombok中的@Data注解与MyBatis的懒加载机制冲突解决

    使用@Data注解与mybatis的懒加载机制实现一对一关系查询时,发现怎么配置都无效,就是一下都查出来了,根本没有懒加载 1.application.yml配置文件配置如下: # mybatis 配 ...

  3. free mybatis 不生效_关于 Mybatis 设置懒加载无效的问题

    看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置: 只需要在 mybatis 的配置文件中设置两个属性就可以了: 但是经过测试之后发现是无效的,经过一番折腾,发现是因为我在测试的时 ...

  4. mybatis 的懒加载原理

    断断续续的阅读 mybatis 的源码有好几个月了,想把自己了解到的一些东西与大家分享.今天给大家分享一下 mybatis 的懒加载原理. mybatis 的懒加载过程挺复杂的,涉及到的东西有很多,包 ...

  5. Mybatis学习第四天:Mybatis延迟加载懒加载,一级缓存,二级缓存,注解开发

    文章目录 Mybatis中的延迟加载 一对一进行延迟加载 一对多的延迟加载 缓存机制: 一级缓存 二级缓存 注解开发 注解开发--单表的增删改查 注解开发--建立表与实体类的对应关系 注解开发--多表 ...

  6. MyBatis的懒加载(延迟加载)

    什么是懒加载 所谓懒加载就是按需加载. 例如: 对象模型就是一个订单中持有一个对用户的引用. 当查询订单信息时,暂时不加载用户信息.就延迟加载(懒加载). 什么情况下才能使用懒加载呢? 上面的情况是无 ...

  7. mybatis ------ 懒加载(八)

    分析: 1.需求:查询订单信息,有时候需要关联查出用户信息. 第一种方法:我们直接关联查询出所有订单和用户的信息 select * from orders o ,user u where o.user ...

  8. Mybatis懒加载

    前言 现有两张表emp.dept如下: 当我们想要查询职员的所有信息时,需要涉及两张表: 第一种方法--多表连接查询 使用sql语句:"select * from emp left join ...

  9. Android--Fragment 实现懒加载和不重复加载

    版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/chaoyu168/article/details/79217223 基类: package fragmen ...

最新文章

  1. python 视频转场_视频剪辑什么鬼?Python 带你高效创作短视频
  2. linux课程_linux系统使用课程更新提示
  3. JVM垃圾回收机制总结
  4. mysql common是什么_MySQL common_schema简介
  5. 前端开发常用代码片段(下篇)
  6. 计算坐标点的距离计算机公式,计算两个GPS坐标点的距离
  7. FreeTextBox 3.1.6 的实践总结和几个问题
  8. axios 与 Vuex的使用
  9. Linux命令行技巧
  10. C#实现超长位整数运算
  11. 如何在C / C ++中使用continue语句
  12. 基于visual Studio2013解决C语言竞赛题之1033数字交换
  13. PHP 相关 收藏
  14. Oracle 创建普通用户,并赋予权限
  15. python题库填空_Python题库
  16. 前端 英文时间格式转化为中文时间格式
  17. Weblogic控制台中文显示还是英文显示,浏览器语言设置决定的
  18. 《组织行为学》读后感_20170803
  19. Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(二)
  20. Pimple研究及PHP框架搭建

热门文章

  1. 几种常用的PID控制方式(入门推荐)
  2. python二次开发ug_二次开发 | 手把手教你用python进行后处理
  3. 取同色手套的排列组合问题
  4. C/C++中的寄存器变量
  5. 零基础自学Python编程从入门到精通基础教程《从零开始学Python》
  6. zynq 实现液晶显示器显示(ADV7511)
  7. 观测未来,携手同行!驻云诚邀您参加2021 OSCAR 开源产业大会!文末报名福利!
  8. phpinfo.php在哪里,phpinfo_phpinfo获取php服务器配置信息
  9. hdu5483Nux Walpurgis
  10. 烂片休想糊弄我,Python代理爬虫豆瓣电影数据手到擒来