视频地址: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. 机器学习(一) 从一个R语言案例学线性回归

    写在前面的话 按照正常的顺序,本文应该先讲一些线性回归的基本概念,比如什么叫线性回归,线性回规的常用解法等.但既然本文名为<从一个R语言案例学会线性回归>,那就更重视如何使用R语言去解决线 ...

  2. distributed 以及 distributional 语义表达的区别

    昨天在审核资讯翻译的时候遇到这两个单词,文章里讲的也不清楚,感觉翻译的也不到位.今天就单独拿出来比较一下吧.尽管这两个单词相似,它们的具体实现方法还是有很大区别的. Distributional wo ...

  3. 【转载】ANSYS有限元分析中的单位问题

    原文地址:http://www.cnblogs.com/ylhome/archive/2009/02/26/1398756.html ansys中没有单位的概念,只要统一就行了.所以,很多人在使用时, ...

  4. NodeJS的小应用

    server.js: //引入require 模块 var http=require('http'); //创建服务器 http.createServer(function(request,respo ...

  5. mybatis 小于号 转义

    AND lbaq.watch_answer_start_datetime >= #{stm}AND lbaq.watch_answer_end_datetime <= #{etm} 此时报 ...

  6. MySQL管理_数据库启动与关闭

    MySQL数据库服务器通常指的的是mysqld,而命令行mysql则是mysql客户端程序,这两个概念通常容易混淆.通常启动mysql服务器即是启动mysqld进程,mysqld启动后,可以通过mys ...

  7. Emmet 真是个好东西

    他的官网:http://docs.emmet.io/ 给广大程序员节省时间 #page>div.logo+ul#navigation>li*5>a{Item $}生产 <div ...

  8. [linux] Nginx编译安装错误error: the HTTP rewrite module requires the PCRE library

    nginx编译错误: 执行如下命令安装缺少的文件即可

  9. Func<T>与Action<T>委托泛型介绍

    .Net 3.5之后,微软推出了Func<T>与Action<T>泛型委托.进一步简化了委托的定义. Action<T>委托主要的表现形式如下: public de ...

  10. C#中获取服务器IP,客户端IP以及网卡物理地址

    客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVariab ...