视频地址:http://edu.51cto.com/sd/be679

  在Mybatis中的延迟加载只有resultMap可以实现,ResultMap 可以实现高级映射(association,collection可以实现一对1和一对多的映射),他们具有延迟加载的功能,resultType不具有延迟加载的功能。

  所谓的延迟加载就是:你需要的时候再去查,比如:你先查询订单表的全部记录,有需要的时候在去查订单详情表的记录,你有需要的时候再去拿,总比你一次性取出来来的好。可以提高数据库的性能。延迟加载需要配置大概分为以下几步。

  1.在全局配置中开启延迟加载

<settings>
<!-- 开启全局性设置懒加载 -->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 开启按需加载 -->
<setting name="aggressiveLazyLoading" value="false"/>
</settings>

  2.在resultMap定义延迟加载

<resultMap type="com.etc.entity.Orders" id="lazyResultMap">
  <!-- 配置要映射的订单信息 -->
  <id column="oid" property="oid" />
  <result column="uid" property="uid" />
  <result column="phone" property="phone" />
  <result column="address" property="address" />
  <!--
    select:指定延迟加载的要执行的statement的id
    column:关联信息的列名
  -->
  <association property="orderDetail" javaType="com.etc.entity.OrderDetail"
    select="findById" column="oid"></association>
</resultMap>

  3.延迟加载的select语句

<select id="findAll" resultMap="lazyResultMap">
select * from orders
</select>
<!--根据ID查询详情表-->
<select id="findById" parameterType="int" resultType="com.etc.entity.OrderDetail">
select *
from orderdetail where oid=#{oid}
</select>

  4.测试延迟加载

    @Test
public void lazy() throws IOException{
//mybatis的配置文件
String resource="mybatis-config.xml";
//得到配置文件流
InputStream inputStream= Resources.getResourceAsStream(resource);
//创建会话工厂,需要传入Mybatis的配置文件信息
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//通过工厂得到SqlSession
SqlSession session=sessionFactory.openSession();
//第一个参数:映射文件中的statement的id:命名空间+id
//第二个参数:就是指定和映射文件中匹配的参数
UsersMapper usersMapper= session.getMapper(UsersMapper.class);
//1.只调用到findAll方法时候
List<Orders>orders=usersMapper.findAll();
for (Orders orders2 : orders) {
System.out.println(orders2);
}
//2.查找全部后通过orders去取订单详情信息的时候
List<OrderDetail> orderDetails=orders.get(0).getOrderDetail();
for (OrderDetail orderDetail : orderDetails) {
System.out.println(orderDetail);
}
}
}

  分析结果理解延迟加载:

    1.只调用到findAll方法的时候运行结果(只发起了一次的查询语句)

    2.查找全部后通过orders去取订单详情信息的时候(发起了两次查询语句)

  这里注意看,第一次测试的时候没有去取orderDetail数据的时候,只查询了一次。

        第二次测试的时候有去取orderDetail数据的时候,就查询了两次。

  这里说明你有需要的时候才去查询,没有需要的时候就不查询,所以这个就是延迟加载

  (测试的时候分两次测试,如果不分开的话,第二次查询会走缓存,下面介绍一级缓存和二级缓存)

8.Mybatis的延迟加载的更多相关文章

  1. mybatis的延迟加载、一级缓存、二级缓存

    mybatis的延迟加载.一级缓存.二级缓存 mybatis是什么? mybatis是一个持久层框架,是apache下的开源项目,前身是itbatis,是一个不完全的ORM框架,mybatis提供输入 ...

  2. Mybatis之延迟加载机制

    1.  延迟加载的含义: 用到的时候才会去进行相关操作 2.  延迟加载的例子: 2.1 spring的BeanFactory,在getBean()的时候才创建Bean 2.2 物理分页查询,只有点击 ...

  3. Mybatis的延迟加载和缓存

    1. MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟加载规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力.       注意:MyBatis的延迟加 ...

  4. Mybatis 测试延迟加载

    在学习mybatis的延迟加载时,对 lazyLoadingEnabled 和 aggressiveLazyLoading 的区别并不理解,特别是对查询的条件不同时,执行的查询语句也不一样,所以还是测 ...

  5. Mybatis的延迟加载和立即加载

    Mybatis的延迟加载和立即加载 示例:在一对多中,当我们有一个用户,他有100个帐户 问题1:在查询用户时,要不要把关联的账户查出来? 问题2:在查询账户时,要不要把关联的用户信息查出来? 问题1 ...

  6. MyBatis学习--延迟加载

    简介 在resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能.例如:我们查询订单并 ...

  7. 七 mybatis的延迟加载

    1       延迟加载 1.1     什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.coll ...

  8. mybatis的延迟加载

    1. 什么是延迟加载 举个例子: 如果查询订单并且关联查询用户信息.如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息.把对用户信息的按需去查询就是延迟加载. 所以延迟加载即先从单 ...

  9. mybatis实现延迟加载多对一

    1.数据库表 CREATE TABLE `country` ( `cid` ) NOT NULL AUTO_INCREMENT COMMENT '国家id', `cname` ) COLLATE ut ...

随机推荐

  1. android 镜像源

    Android SDK在线更新镜像服务器 中国科学院开源协会镜像站地址: IPV4/IPV6: mirrors.opencas.cn 端口:80 IPV4/IPV6: mirrors.opencas. ...

  2. Flex Builder读书笔记(一)

    Flex表现层服务器包含Flex应用框架和Flex运行服务,Flex框架包含MXML描述性语言.ActionScript程序语言和Flex类库.MXML原理定义用户界面元素,ActionScript定 ...

  3. sqlserver sum 和count在关于进行统计时的区别

    sum是对内容的数量进行相加,count 对表行数 对象进行统计 在使用 case 时,如 select subject,count(case when score>80 then score ...

  4. vue.js使用详解

    1.什么是vue.jsvue.js是一款数据驱动型的js框架.何为数据驱动型?html视图层定义模板,vue定义数据.html和vue数据,通过标签id关联. 2.vue.js引入<script ...

  5. spl_autoload_register更改框架文件引用模式

    今天单点登陆要用到 spl_autoload_register,但是YII的Yii::autoload在包含失败的时候会抛异常,就不会执行(spl_autoload_call)其他spl_autolo ...

  6. 使用pt-stalk分析MySQL的性能波动 (转)

    简介 在MySQL服务器出现短暂(5~30秒)的性能波动的时候,一般的性能监控工具都很难抓住故障现场,也就很难收集对应较细粒度的诊断信息.另外,如果这种波动出现的频率很低,例如几天才一次,我们也很难人 ...

  7. javascript获取对象中的属性及值

    function displayProp(obj){ var names=""; for(var name in obj){ names+=name+": "+ ...

  8. winform基本控件----按钮

    这次来引用一个我们上课时候老师给的一个实验内容,来说一下winform程序设计中的按钮控件的使用.下面是我们老师给的实验内容. 实验目的: 掌握Winform的开发环境. 掌握窗体的创建和基本方法. ...

  9. Junit4常用注解

    Junit4注解 JUnit4的测试类不用再继承TestCase类了.使用注解会方便很多. @Before:初始化方法@After:释放资源@Test:测试方法,在这里可以测试期望异常和超时时间@Ig ...

  10. 在 Windows上配置NativeScript CLI

    1.安装Node.js,到https://nodejs.org/下载安装 2.安装Chocolatey,https://chocolatey.org/,先看一下关于chocolatey的介绍: 安装方 ...