mybatis的懒加载和缓存
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的懒加载和缓存相关推荐
- mybatis懒加载与缓存
在接触mybatis时我们会学到接触小知识,关于懒加载的一些知识点还是需要亲自去测试一下才能加深理解; mybatis懒加载与缓存 mybatis对缓存的支持 mybatis一级缓存 mybatis的 ...
- lombok中的@Data注解与MyBatis的懒加载机制冲突解决
使用@Data注解与mybatis的懒加载机制实现一对一关系查询时,发现怎么配置都无效,就是一下都查出来了,根本没有懒加载 1.application.yml配置文件配置如下: # mybatis 配 ...
- free mybatis 不生效_关于 Mybatis 设置懒加载无效的问题
看了 mybatis 的教程,讲到关于mybatis 的懒加载的设置: 只需要在 mybatis 的配置文件中设置两个属性就可以了: 但是经过测试之后发现是无效的,经过一番折腾,发现是因为我在测试的时 ...
- mybatis 的懒加载原理
断断续续的阅读 mybatis 的源码有好几个月了,想把自己了解到的一些东西与大家分享.今天给大家分享一下 mybatis 的懒加载原理. mybatis 的懒加载过程挺复杂的,涉及到的东西有很多,包 ...
- Mybatis学习第四天:Mybatis延迟加载懒加载,一级缓存,二级缓存,注解开发
文章目录 Mybatis中的延迟加载 一对一进行延迟加载 一对多的延迟加载 缓存机制: 一级缓存 二级缓存 注解开发 注解开发--单表的增删改查 注解开发--建立表与实体类的对应关系 注解开发--多表 ...
- MyBatis的懒加载(延迟加载)
什么是懒加载 所谓懒加载就是按需加载. 例如: 对象模型就是一个订单中持有一个对用户的引用. 当查询订单信息时,暂时不加载用户信息.就延迟加载(懒加载). 什么情况下才能使用懒加载呢? 上面的情况是无 ...
- mybatis ------ 懒加载(八)
分析: 1.需求:查询订单信息,有时候需要关联查出用户信息. 第一种方法:我们直接关联查询出所有订单和用户的信息 select * from orders o ,user u where o.user ...
- Mybatis懒加载
前言 现有两张表emp.dept如下: 当我们想要查询职员的所有信息时,需要涉及两张表: 第一种方法--多表连接查询 使用sql语句:"select * from emp left join ...
- Android--Fragment 实现懒加载和不重复加载
版权声明:本文为博主原创文章,转载请标明出处. https://blog.csdn.net/chaoyu168/article/details/79217223 基类: package fragmen ...
最新文章
- python 视频转场_视频剪辑什么鬼?Python 带你高效创作短视频
- linux课程_linux系统使用课程更新提示
- JVM垃圾回收机制总结
- mysql common是什么_MySQL common_schema简介
- 前端开发常用代码片段(下篇)
- 计算坐标点的距离计算机公式,计算两个GPS坐标点的距离
- FreeTextBox 3.1.6 的实践总结和几个问题
- axios 与 Vuex的使用
- Linux命令行技巧
- C#实现超长位整数运算
- 如何在C / C ++中使用continue语句
- 基于visual Studio2013解决C语言竞赛题之1033数字交换
- PHP 相关 收藏
- Oracle 创建普通用户,并赋予权限
- python题库填空_Python题库
- 前端 英文时间格式转化为中文时间格式
- Weblogic控制台中文显示还是英文显示,浏览器语言设置决定的
- 《组织行为学》读后感_20170803
- Python的mpl_finance模块从2020年已经提醒弃用,新mplfinance模块详解(二)
- Pimple研究及PHP框架搭建
热门文章
- 几种常用的PID控制方式(入门推荐)
- python二次开发ug_二次开发 | 手把手教你用python进行后处理
- 取同色手套的排列组合问题
- C/C++中的寄存器变量
- 零基础自学Python编程从入门到精通基础教程《从零开始学Python》
- zynq 实现液晶显示器显示(ADV7511)
- 观测未来,携手同行!驻云诚邀您参加2021 OSCAR 开源产业大会!文末报名福利!
- phpinfo.php在哪里,phpinfo_phpinfo获取php服务器配置信息
- hdu5483Nux Walpurgis
- 烂片休想糊弄我,Python代理爬虫豆瓣电影数据手到擒来