MyBatis(延迟加载 缓存)

mybatis目录

一对一延迟加载
1.在SqlMapConfig.xml中配置setting标签
2.在IAccoutDao.xml中配置association标签
3.测试类
4.成功运行
一对多延迟加载
2.在IUserDao.xml中配置collection标签
缓存
一级缓存
二级缓存
1.SqlMaoConfig.xml中
2.在需要使用二级缓存的实体类的mapper中
3.测试类

一对一延迟加载

1.在SqlMapConfig.xml中配置setting标签

详情看中文官网

<settings><!-- 配置全局缓存--><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="true"/></settings>

2.在IAccoutDao.xml中配置association标签

<!--定义封装account和user的resultMap--><resultMap id="accountUserMap" type="Account"><id property="id" column="id"></id><result property="uid" column="uid"></result><result property="money" column="money"></result><!--一对一的关系映射,配置封装user的内容select属性的内容,查询用户的唯一标识符column属性的内容:用户根据id查询时,所需要参数的值--><association property="user" column="uid" javaType="User" select="com.daniel.dao.IUserDao.findById"><id property="id" column="id"></id><result property="username" column="username"></result><result property="sex" column="sex"></result><result property="address" column="address"></result><result property="birthday" column="birthday"></result></association></resultMap><select id="findAll" resultMap="accountUserMap">select * from  account</select>

3.测试类

@Testpublic void findAll(){List<Account> accounts = accoutDao.findAll();for (Account account:accounts) {System.out.println("每一个account的信息");System.out.println(account);System.out.println(account.getUser());}}

4.成功结果

在这里插入图片描述

一对多延迟加载

和一对一没有太多区别

2.在IUserDao.xml中配置collection标签

<!--定义封装account和user的resultMap--><resultMap id="accountUserMap" type="Account"><id property="id" column="id"></id><result property="username" column="username"></result><result property="sex" column="sex"></result><result property="address" column="address"></result><result property="birthday" column="birthday"></result><!--一对一的关系映射,配置封装user的内容select属性的内容,查询用户的唯一标识符column属性的内容:用户根据id查询时,所需要参数的值--><collection property="accounts" ofType="Account" select="com.daniel.dao.IAccoutDao.findAccountByUid" column="id"><id property="id" column="aid"></id><result property="uid" column="uid"></result><result property="money" column="money"></result></collection></resultMap>

缓存

在这里插入图片描述

一级缓存

其实mybatis中默认就是一级缓存了(平时的测试类就是一级缓存存在SqlSession中)

二级缓存

1.SqlMaoConfig.xml中

<settings><setting name="cacheEnabled" value="true"/></settings>

2.在需要使用二级缓存的实体类的mapper中

<!--开启user支持二级缓存--><cache/><!-- 根据id查询用户   注意属性useCache --><select id="findById" parameterType="INT" resultType="user" useCache="true">select * from user where id = #{uid}</select>

3.测试类

public class SecondLevelCacheTest {private InputStream in;private  SqlSessionFactory factory;@Before//用于在测试方法执行之前执行public void init()throws Exception{//1.读取配置文件,生成字节输入流in = Resources.getResourceAsStream("SqlMapConfig.xml");//2.获取SqlSessionFactoryfactory = new SqlSessionFactoryBuilder().build(in);}@After//用于在测试方法执行之后执行public void destroy()throws Exception{in.close();}/*** 测试二级缓存*/@Testpublic void testFirstLevelCache(){SqlSession sqlSession1 = factory.openSession();IUserDao dao1 = sqlSession1.getMapper(IUserDao.class);User user1 = dao1.findById(41);System.out.println(user1);sqlSession1.close();//一级缓存消失SqlSession sqlSession2 = factory.openSession();IUserDao dao2 = sqlSession2.getMapper(IUserDao.class);User user2 = dao2.findById(41);System.out.println(user2);sqlSession2.close();System.out.println(user1 == user2);}}

在这里插入图片描述
注意:
从图中可以看出来第二次findbyId根本没有走数据库(数据都是从SqlSessionFactory的二级缓存中拿的 不是对象!)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/325645.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

剑英的区块链学习手记(二)

孙子说&#xff0c;知己知彼&#xff0c;百战不殆。 咱是通过小蚁学习区块链技术的。 开工之前&#xff0c;先了解一下小蚁的资料家族。 小蚁网站 https://www.antshares.org/ 小蚁源码 https://github.com/AntShares 小蚁SDK源码 https://github.com/ANTSHARESSdk 比较集…

跟我学 Java 8 新特性之 Stream 流(二)关键知识点

转载自 跟我学 Java 8 新特性之 Stream 流&#xff08;二&#xff09;关键知识点 我们的第一篇文章&#xff0c;主要是通过一个Demo&#xff0c;让大家体验了一下使用流API的那种酣畅淋漓的感觉。如果你没有实践&#xff0c;我还是再次呼吁你动手敲一敲&#xff0c;自己实实…

Build 2017 | 微软开发者大会临近,今年的主题是边缘计算

200 多家明星企业&#xff0c;20 位著名投资机构顶级投资人共同参与&#xff01;「新智造成长榜」致力于发掘 AI 领域有 “三年十倍” 成长潜力的创新公司&#xff0c;下一波 AI 独角兽&#xff0c;会有你么&#xff1f;点击加入&#xff01; 雷锋网按&#xff1a;微软首席执行…

王者齐聚!Unite 2017 Shanghai 日程讲师全揭晓

汇聚了来自全球的 Unity开发者、发行商、培训家及爱好者的 Unite 2017 Shanghai 即将于于 5 月 11 日&#xff0d;13日在上海国际会议中心隆重举行。Unite 大会是由 Unity 举办的全球开发者大会&#xff0c;至今已有 10 年历史&#xff0c;并已成为游戏行业、VR/AR 行业最具权威…

批评?惩罚?

批评&#xff1f;惩罚&#xff1f;最近一直在听王晓春老师的《做一个专业的班主任》&#xff0c;并且上次在校内分享教学经验和技巧的时候&#xff0c;也推荐给其他的老师看了。我一般都是在上班的路上听&#xff0c;王老师的很多观点确实值得我们深思&#xff0c;但是&#xf…

屌炸天,Oracle 发布了一个全栈虚拟机 GraalVM,支持 Python

转载自 屌炸天&#xff0c;Oracle 发布了一个全栈虚拟机 GraalVM&#xff0c;支持 Python 前阵子&#xff0c;Oracle 发布了一个黑科技 "GraalVM"&#xff0c;号称是一个全新的通用全栈虚拟机&#xff0c;并具有高性能、跨语言交互等逆天特性&#xff0c;真有这么…

就业形势如此的严峻,你为何不努力?

就业形势如此的严峻&#xff0c;你们有何理由不努力&#xff1f;今天&#xff0c;围绕就业的问题展开个话题吧。马上&#xff0c;18级1班就要出去就业了&#xff0c;以前带的17级3班三期的时候学生的状态都比较积极&#xff0c;自己知道自己的实力&#xff0c;我和就业老师、班…

涨姿势,图文带你了解 8 大排序算法

转载自 涨姿势&#xff0c;图文带你了解 8 大排序算法 排序算法可以分为内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存。 常见…

React中分页错误

因为save是异步方法 直接从model中取最新的数据

班级第一次问卷调查

135编辑器调差问卷终于&#xff0c;在班内做了一次问卷调查了&#xff0c;这是自同学们入学以来做的第一次调查&#xff0c;主要是从学生的对所学课程、班主任以及教员老师的角度出发的&#xff0c;所有的调查均采取匿名方式&#xff0c;以保证调查的民主性&#xff1a;调查的问…

OAuth 2.0: Bearer Token Usage

Bearer Token (RFC 6750) 用于OAuth 2.0授权访问资源&#xff0c;任何Bearer持有者都可以无差别地用它来访问相关的资源&#xff0c;而无需证明持有加密key。一个Bearer代表授权范围、有效期&#xff0c;以及其他授权事项&#xff1b;一个Bearer在存储和传输过程中应当防止泄露…

Spring Boot 核心配置文件详解

转载自 Spring Boot 核心配置文件详解 用过 Spring Boot 的都知道在 Spring Boot 中有以下两种配置文件 bootstrap (.yml 或者 .properties) application (.yml 或者 .properties) 为什么会有这两种配置文件呢&#xff1f;大家都清楚它们的区别和具体使用场景吗&#xff1…

Net分布式系统之:微服务架构

一、背景&问题 之前框架是一个基于SOA思想设计的分布式框架。各应用通过服务方式提供使用&#xff0c;服务之间通信是RPC方式调用&#xff0c;具体实现基于.NET的WCF通信平台。框架存在如下2个问题&#xff1a; 1、高并发处理能力不足。一当高并发请求&#xff0c;可能出现…

[Cake] 0.C#Make自动化构建-简介

0. Cake是什么&#xff1f; Cake是C# Make的缩写&#xff0c;是一个基于C# DSL的自动化构建系统。它可以用来编译代码&#xff0c;复制文件以及文件夹&#xff0c;运行单元测试&#xff0c;压缩文件以及构建Nuget包等等。 熟悉大名鼎鼎的Make的小伙伴&#xff0c;应该已经知道…

99%的面试官都会问到的Java面试题

转载自 99%的面试官都会问到的Java面试题 最近是招聘季&#xff0c;所谓金九银十&#xff0c;正是跳槽的好几节。今天&#xff0c;给大家整理了一些Java面试常考的经典题目&#xff0c;我们一道一道来分析一下。 经典面试题 1、谈谈你对 Java 平台的理解&#xff1f;“Java …

想对你们每个人说的话

135编辑器1吉方鑫&#xff1a;方鑫&#xff0c;在我和王老师面前&#xff0c;你永远都是那么的乖&#xff0c;爱笑&#xff0c;常言道&#xff1a;爱笑的人运气不会太差&#xff0c;希望你也是如此哦&#xff0c;现在的学业已经到了三期了&#xff0c;相信你也知道后期的学习该…

Dora.Interception: 一个为.NET Core度身定制的AOP框架

多年从事框架设计开发使我有了一种强迫症&#xff0c;那就是见不得一个应用里频繁地出现重复的代码。之前经常Review别人的代码&#xff0c;一看到这样的程序&#xff0c;我就会想如何将这些重复的代码写在一个地方&#xff0c;然后采用“注入”的方式将它们放到需要的程序中。…

揭秘阿里秒级百万TPS平台架构实现

转载自 揭秘阿里秒级百万TPS平台架构实现 导读&#xff1a;搜索离线数据处理是一个典型的海量数据批次/实时计算结合的场景&#xff0c;阿里搜索中台团队立足内部技术结合开源大数据存储和计算系统&#xff0c;针对自身业务和技术特点构建了搜索离线平台&#xff0c;提供复杂…

相对你们说的一些话

135编辑器1田文豪&#xff1a;文豪&#xff0c;最近上课我看你很认真&#xff0c;面试题也背的挺好的&#xff0c;你在很努力的学习了&#xff0c;这是一个非常好的趋势&#xff0c;希望你能一直保持下去。你的脑字也是很灵活的&#xff0c;好几次考试都超出了我的预想&#xf…

Build 2017 | 一文看懂微软 Build 2017 大会:让 AI 走向边缘

200 多家明星企业&#xff0c;20 位著名投资机构顶级投资人共同参与&#xff01;「新智造成长榜」致力于发掘 AI 领域有 “三年十倍” 成长潜力的创新公司&#xff0c;下一波 AI 独角兽&#xff0c;会有你么&#xff1f;点击阅读原文了解详情&#xff01; 雷锋网按&#xff1a;…