延迟加载

意义

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

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

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中。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、什么是延迟加载 延迟加载:先从单表查询、需要时再从关联表去关联查询,大大提高数据库性能。 resultMap可...
    yjaal阅读 3,065评论 0 3
  • 什么是延迟加载 举个例子:如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息...
    我相信你爱过gg阅读 265评论 0 0
  • 一.什么是延迟加载 延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查...
    Mr_欢先生阅读 831评论 0 9
  • 1.什么是延迟加载 resultMap可以实现高级映射,association、collection具备延迟加载功...
    Ching_Lee阅读 245评论 0 0
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 6,208评论 0 4

友情链接更多精彩内容