延迟加载

作者: 幻影翔 | 来源:发表于2018-05-27 20:20 被阅读9次

意义

在进行数据查询时,为了提高数据库查询性能,尽量使用单表查询,因为单表查询比多表关联查询速度要快。

如果查询单表就可以满足需求,一开始先查询单表,当需要关联信息时,再关联查询,当需要关联信息再查询这个叫延迟加载。

mybatis中resultMap提供延迟加载功能,通过resultMap配置延迟加载。

配置

在collection/association中加入select内容

  <!-- SqlMapConfig.xml中编写全局配置参数 -->
<settings>
    <!-- 延迟加载总开关 -->
    <setting name="lazyLoadingEnabled" value="true" />  
    <!-- 设置按需加载 -->
    <setting name="aggressiveLazyLoading" value="false" />
</settings>

<association 
   property="user"  select="mapper.UserMapper.findUserById" column="user_id">
</association>

需求例子

查询订单及用户的信息,一对一查询。

刚开始只查询订单信息。

当需要用户时调用 Orders类中的getUser()方法执行延迟加载 ,向数据库发出sql。

实现的测试代码

 <!--开始只查询订单,对用户信息进行延迟加载 -->
  
 <select id="findOrderUserListLazyLoading" resultMap="orderCustomLazyLoading">
     SELECT 
      orders.*
    FROM
      orders
 </select>
//一对一查询延迟加载
@Test
public void testFindOrderUserListLazyLoading() throws Exception {
SqlSession sqlSession = sqlSessionFactory.openSession();
    // 创建mapper代理对象
    OrdersMapperCustom ordersMapperCustom = sqlSession
            .getMapper(OrdersMapperCustom.class);

    // 调用方法
    List<Orders> list = ordersMapperCustom.findOrderUserListLazyLoading();
    
    //这里执行延迟加载,要发出sql
    User user = list.get(0).getUser();
    System.out.println(user);
    
}

使用场景

延迟加载:

  • 延迟加载实现的方法多种多样,在只查询单表就可以满足需求,为了提高数据库查询性能使用延迟加载,再查询关联信息, mybatis提供延迟加载的功能用于service层。

resultType:

  • 作用:将查询结果按照sql列名pojo属性名一致性映射到pojo中。
  • 场合:常见一些明细记录的展示,将关联查询信息全部展示在页面时,此时可直接使用resultType将每一条记录映射到pojo中,在前端页面遍历list(list中是pojo)即可。

resultMap:

使用association和collection完成一对一和一对多高级映射。

association:

  • 作用:将关联查询信息映射到一个pojo类中。
  • 场合:为了方便获取关联信息可以使用association将关联订单映射为pojo,比如:查询订单及关联用户信息。

collection:

  • 作用:将关联查询信息映射到一个list集合中。
  • 场合:为了方便获取关联信息可以使用collection将关联信息映射到list集合中,比如:查询用户权限范围模块和功能,可使用collection将模块和功能列表映射到list中。

相关文章

  • 懒加载和预加载

    1)概念: 懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加载:提前加载图片...

  • JS

    JS 懒加载,预加载 概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片。预加...

  • 图片懒加载

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:JS图片延迟加载 延迟加载图片或符合某些条件时才加载某些图片。 预...

  • mybatis 延迟加载

    mybatis 延迟加载 什么是延迟加载 延迟加载又叫懒加载,也叫按需加载,也就是说先加载主信息,需要的时候,再去...

  • 单例模式

    延迟加载 延迟加载是指等到真正使用时去创建实例,不使用时不创建实例 对比延迟加载(懒汉式)和非延迟加载(饿汉式):...

  • js延迟加载的六种方式

    js实现延迟加载的几种方法,js的延迟加载有助与提高页面的加载速度 JS延迟加载,也就是等页面加载完成之后再加载 ...

  • 深入理解js

    延迟加载 (Lazyload) 三种实现方式 延迟加载也称为惰性加载,即在长网页中延迟加载图像。用户滚动到它们之前...

  • js 实现图片懒加载

    一、懒加载 懒加载也叫延迟加载,Js中图片的延迟加载,延迟图片需要符合某些条件时才加载;对于图片过多的页面,为了加...

  • javascript图片懒加载与预加载的分析

    懒加载与预加载的基本概念。 懒加载也叫延迟加载:前一篇文章有介绍:JS图片延迟加载 延迟加载图片或符合某些条件时才...

  • mybatis二级缓存

    1.mybatis延迟加载策略 什么是延迟加载? 延迟加载就是在需要用到数据时才进行加载,不需要用到数据时就不加载...

网友评论

本文标题:延迟加载

本文链接:https://www.haomeiwen.com/subject/jtrijftx.html