(六)Mybatis总结之延迟加载】的更多相关文章

应用场景: i.假如一个用户他有N个订单(N>=1000),那么如果一次性加载的话,一个用户对象的订单集合OrderList里面就会有1000多个Order的对象.计算:一个订单对象里面数据有多大 ii.从优化考虑,我们会使用延时加载去降低内存的占用,即先查询用户,不查询订单,当你通过 用户.getOrderList()的时候,再查询订单集合 总而言之一句话:查询的时候,只查询当前对象,不查询关联对象,即为延时加载.但是有一个问题,如果你是延时加载,那么和查询两次没区别,那我为什么不用查询两次?…
mybatis探究之延迟加载和缓存 一.什么是延迟加载 1.延迟加载的概念 在mybatis进行多表查询时,并非所有的查询都需要立即进行.例如在查询带有账户信息的用户信息时,我们们并不需要总是在加载用户信息时就一定要加载他的账户信息.这时就要用到延迟加载,所谓延迟加载就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据.延迟加载也称懒加载. 2.延迟加载的好处和坏处 好处:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快. 坏处:因为只…
Mybatis中的延迟加载的使用方法 在Mybatis中查询订单,然后带出商品信息和快递信息的配置方法 orderMapper.xml配置如下 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mappe…
http://blog.csdn.net/yerenyuan_pku/article/details/71904315 本文将手把手教你如何使用MyBatis整合Spring,这儿,我本人使用的MyBatis是MyBatis3.2.7这个版本,Spring是Spring4.1.3这个版本.读者只要学会这两个版本的框架整合之后,其他版本之间的整合就一通百通了. 整合思路 MyBatis整合Spring的思路如下: SqlSessionFactory对象应该放到spring容器中作为单例存在. 传统…
Mybatis  一对多延迟加载,并且子查询中与主表字段不对应应用说明. 实现一对多关联(懒加载),一个教研组对应多个教师,既:教师的教研编号与教研组的教研编号关联,并且教师关联教研组外键与教研组编号不一致. 1.工程资源配置文件 1).本应用实际应用到了(开启延迟加载配置.关闭立即加载配置): 2) .外关联查询语句对应xml文件 :<mapper resource="com/mybatis03/mapper/teacherGroupToTeacherMapper.xml"/&…
在上一篇博客中,我们提到过有关于Mybatis输出映射中resultMap能够实现延迟加载的事,然而真的是所有的resultMap都能实现延迟加载还是咋地啊?现在我们就来对那一句话做一下阐述和实例说明. 一.首先我们要知道什么是延迟加载? 延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作:可以简单理解为,只有在使用的时候,才会发出sql语句进行查询:延迟加载的有效期是在session打开的情况下,当session关闭后,会报异常.…
一.延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快. 在mybatis核心配置文件中配置: lazyLoadingEnabled.aggressiveLazyLoading 设置项 描述 允许值 默认值 lazyLoadingEnabled 全局性设置…
1  订单商品数据模型 以订单商品数据为模型,来对mybaits高级关系映射进行学习.…
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6923464.html 前面有将到:Spring+SpringMVC+MyBatis深入学习及搭建(五)--动态sql 1.商品订单数据模型 1.1数据模型分析思路 (1)每张表记录的数据内容 分模块对每张表记录的内容进行熟悉,相当于你学习系统需求(功能)的过程. (2)每张表重要的字段设置 非空字段.外键字段 (3)数据库级别表与表之间的关系 外键关系 (4)表与表之间的业务关系 在分析表与表之间的业务关…
关联关系 在关系型数据库中,表与表之间很少是独立与其他表没关系的.所以在实际开发过程中我们会碰到很多复杂的关联关系.在此我们来分析下载mybatis中怎么处理这些关系 1对1关系 我们有一张员工表(T_EMP),一张部门表(T_DEPT).员工表中的一条记录对应于部门表中有且仅有一条记录.这就是一对一的关联关系. 查询每个员工的信息及对应的部门信息 对象与对象1对1 部门对象: // 部门编号 private int deptid; // 部门名称 private String dname; /…
6 延迟加载 6.1 什么是延迟加载 需要查询关联信息时,使用mybatis延迟加载特性可有效的减少数据库压力,首次查询只查询主要信息,关联信息等用户获取时再加载. resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 延迟加…
1. 什么是延迟加载 举个例子:如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 所以延迟加载即先从单表查询.需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快.  我们来对比一下: 关联查询:SELECT orders.*, user.username FROM orders, USER WHERE orders.user_id = user.id 延迟加载相当于…
一:引言 通过前面几篇的文章介绍了Mybatis的一对一.一对多.多对多关系的配置及实现,可是大家发现了吗?在执行关联查询的时候,直接会把当前查询的主表里包含的副表也查询后封装到对象里,其实在实际开发中,很多时候我们并不需要总是在查询主表数据时就一定要加载它们的副表数据,此时我们就可以使用延迟加载.还有就是在介绍完延迟加载策略后会说明一下Mybatis的缓存机制. 准备工作[搭建一个快速的小框架] 二:Mybatis延迟加载策略 1:什么是延迟加载 在用到副表数据的时候才进行数据加载,没使用到副…
Mybatis 仅支持 association 关联对象和 collection 关联集合对象的延迟加载,association 指的就是一对一,collection 指的就是一对多查询.在 Mybatis配置文件中,可以配置是否启用延迟加载 lazyLoadingEnabled=true|false.它的原理是,使用 CGLIB 创建目标对象的代理对象,当调用目标方法时,进入拦截器方法,比如调用 a.getB().getName(),拦截器 invoke()方法发现 a.getB()是null…
application.properties #数据库配置 #数据源类型 spring.datasource.type=com.alibaba.druid.pool.DruidDataSource #我用的是springBoot 2.1 不需要配置驱动,配置驱动的话反而会出现警告 #spring.datasource.url=jdbc:mysql://192.168.238.130:3306/dev?useUniode=true&characterEncoding=utf-8 #spring.d…
在定义sqlSessionFactory时需要指定MyBatis主配置文件: <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="configLocation" value="classpath:mybatis-config.xml" /> <property…
不用骨架创建项目 复制一对多的代码src下的代码到我们刚才创建的项目里面 把依赖信息复制过来 这里原来实现的功能是立即加载的功能.sql语句是一次性查询的两个表关联的查询. 调整代码 删除AccountUser这个类 AccountTtest只保留findAll的方法 associaiton先剪切掉. 修改后 先运行这个单表操作 别名的问题 这是下面这个方法配置引起的.删掉下面红框内的代码即可. 再次来执行.正常执行成功 配置延迟加载 这里我们需要使用一个新的属性,叫做select 其实sele…
MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分析MyBatis的二级缓存的设计原理. 1.MyBatis的缓存机制整体设计以及二级缓存的工作模式 如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章.如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession…
延迟加载其实就是将数据加载时机推迟,比如推迟嵌套查询的执行时机.在Mybatis中经常用到关联查询,但是并不是任何时候都需要立即返回关联查询结果.比如查询订单信息,并不一定需要及时返回订单对应的产品信息,查询商品分类信息并不一定要及时返回该类别下有哪些产品,这种情况一下需要一种机制,当需要查看时,再执行查询,返回需要的结果集,这种需求在Mybatis中可以使用延迟加载机制来实现.延迟加载可以实现先查询主表,按需实时做关联查询,返回关联表结果集,一定程度上提高了效率. Mapper.xml映射文件…
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/6953005.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(六)——MyBatis关联查询 1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能. 需求: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查…
在Mybatis中的延迟加载只有resultMap可以实现,ResultMap 可以实现高级映射(association,collection可以实现一对1和一对多的映射),他们具有延迟加载的功能,resultType不具有延迟加载的功能. 所谓的延迟加载就是:你需要的时候再去查,比如:你先查询订单表的全部记录,有需要的时候在去查订单详情表的记录,你有需要的时候再去拿,总比你一次性取出来来的好.可以提高数据库的性能.延迟加载需要配置大概分为以下几步. 1.在全局配置中开启延迟加载 <settin…
下文从mybatis(3.2.7)延迟加载样例讲起,逐步深入其实现机制. 下面的例子是Student类关联一个Teacher对象,在访问Student对象时,不立即加载其关联的Teacher对象,而是等到访问Teacher对象的属性时,才加载Teacher对象. 源代码下载:http://download.csdn.net/detail/u014569459/7363097 1.Student.java package dao.domain; public class Student { pub…
在前面的博文中,小编主要简单的介绍了mybatis中的高级映射,小伙伴们可以把mybatis和hibernate的因素进行对比,更加有利于理解.今天这篇博文,小编主要来简单介绍一下mybatis中的延迟加载.首先,我们需要知道什么是延迟加载,延迟加载(lazy load)是(也称为懒加载)Hibernate3关联关系对象默认的加载方式,延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作. 延迟加载,可以简单理解为,只有在使用的时候,…
1. MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力.       注意:MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查询语句的. 2.MyBatis根据对关联对象查询的select语句的执行时机,分为3种类型:   直接加载   侵入式延迟加载   深度延迟加载 直接加载 执行完对主加载对象的select语句,马上执行对关联对象的select查询 侵入是…
一.Mybatis中的延迟加载 1.延迟加载背景:Mybatis中Mapper配置文件中的resultMap可以实现高级映射(使用association.collection实现一对一及一对多(多对多)映射),同样的association.collection具备延迟加载功能.所谓延迟加载,就是先单表查询,需要时再从关联表去关联查询(同样也可能只是是单表查询),大大单表查询速度更快,所以可以间接的提高数据库性能 2.在mybatis核心配置文件中配置,其中lazyLoadingEnabled表示…
声明:面试是遇到延迟加载问题,在网页搜索到此篇文章,感觉很有帮助,留此学习之用! 一.分步查询 分步查询通常应用于关联表查询,如:电商平台,查询订单信息时需要查询部分的用户信息:OA系统查询个人信息时需要查询部门信息,反之亦是.相对于关联查询来说,分步查询将查询sql拆分,这里引申出一个问题是:分步查询与关联表查询的不同. 从代码层面来说:关联表查询能够有效的简化代码编写逻辑,减小代码编写难度,同时避免B-U-G(代码多了,bug   就多了); 而分步查询则能够增强代码的可用性(这点我也不是非…
延迟加载的概念只存在于分步查询时: 延迟加载的本质是为第一步查询返回的Java Bean创建了一个代理对象: 延迟加载的全局设置有两个: lazyLoadingEnabled,作用为设置select语句的默认延迟加载是否开启: aggressiveLazyLoading,对于开启了延迟加载的select作用如下: 值为true时,假设select返回的Java Bean为xxx,那么获取任何xxx属性的动作都会导致resultMap中定义的所有关联查询马上执行: 值为false时,假设yyy为x…
0.什么是N+1问题? 在查询中一下子取出所有属性,就会使数据库多执行几条毫无意义的SQL .实际中不需要把所有信息都加载进来,因为有些信息并不常用,加载它们会多执行几条毫无用处的 SQL,导致数据库资源的损耗和系统性能的下降.假设现在有 N 个关联关系完成了级联,那么只要再加入一个关联关系,就变成了 N+l个级联,所有的级联 SQL 都会被执行,显然会有很多并不是我们关心的数据被取出,这样会造成很大的资源浪费,这就是 N+l 问题,尤其是在那些需要高性能的互联网系统中,这往往是不被允许的.为了…
MyBatis的延迟加载.一级缓存.二级缓存设置 首先我们必须分清延迟加载的适用对象 延迟加载 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力.  注意:MyBatis的延迟加载只是对关联对象的查询有延迟设置,对于主加载对象都是直接执行查询语句的. MyBatis根据对关联对象查询的select语句的执行时机,分为3种类型:1.直接加载2.侵入式延迟加载3.深度延迟加载 直接加载:执行完对主加…
1.概念 MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. 2.关联对象的加载时机 ①.直接加载 执行完对主加载对象的select语句,马上执行对关联对象的select查询 ②.侵入式延迟加载 执行对主加载对象的查询时,不会执行对关联对象的查询.但是当要访问主加载对象的详情时,就会马上执行关联对象的select查询.即对关联对象的查询执行,侵入到了主加载对象的详情访问中.也可以这样理解:将关联…