`

MyBatis学习:延迟加载

阅读更多

一、什么是延迟加载

resultMap可实现高级映射(使用association、collection实现一对一及一对多映射),association、collection具备延迟加载功能。

需求:

如果查询订单并且关联查询用户信息。如果先查询订单信息即可满足要求,当我们需要查询用户信息时再查询用户信息。把对用户信息的按需去查询就是延迟加载。

延迟加载:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。

二、使用association实现延迟加载

1、需求:查询订单并且关联查询用户信息
2、mapper.xml

需要定义两个mapper的方法对应的statement。

1)  只查询订单信息

SELECT * FROM orders

在查询订单的statement中使用association去延迟加载(执行)下边的statement。

 

[html] view plain copy
 
  1. <!-- 查询订单关联查询用户,用户信息需要延迟加载 -->  
  2.     <select id="findOrdersUserLazyLoading" resultMap="OrderUserLazyLoadingResultMap">  
  3.         SELECT * FROM orders  
  4.     </select>  

 

resultMap怎么写,看下面的3。

2)  关联查询用户信息

通过上边查询到的订单信息中user_id去关联查询用户信息

使用UserMapper.xml中的findUserById

 

[html] view plain copy
 
  1. <select id="findUserById" resultType="user" parameterType="int">  
  2.         SELECT * FROM USER WHERE id=#{value}  
  3.     </select>  

 

3)  执行思路:

 

上边先去执行findOrdersuserLazyLoading,当需要的时候再去执行findUserById,通过resultMap的定义将延迟加载执行配置起来。

3、延迟加载的resultMap
[html] view plain copy
 
  1. <resultMap type="cn.itcast.mybatis.po.Orders" id="OrderUserLazyLoadingResultMap">  
  2.     <!-- 对订单信息进行映射配置 -->  
  3.     <id column="id" property="id"/>  
  4.     <result column="user_id" property="userId"/>  
  5.     <result column="number" property="number"/>  
  6.     <result column="createtime" property="createtime"/>  
  7.     <result column="note" property="note"/>  
  8.     <!-- 对用户信息进行延迟加载 -->  
  9.     <!--   
  10.     select:指定延迟加载要执行的statement的id(是根据user_id查询用户信息是statement)  
  11.     要使用UserMapper.xml中findUserById完成根据用户id(user_id)对用户信息的查询,如果findUserById不在本mapper中,  
  12.     需要前边加namespace  
  13.     column:订单信息中关联用户信息的列,是user_id  
  14.      -->  
  15.     <association property="user" javaType="cn.itcast.mybatis.po.User"   
  16.     select="cn.itcast.mybatis.mapper.UserMapper.findUserById" column="user_id">  
  17.       
  18.     </association>  
  19.     </resultMap>  

使用association中是select指定延迟加载去执行的statementid

 4、打开延迟加载开关
[html] view plain copy
 
  1. <settings>  
  2.         <!-- 打开延迟加载的开关 -->  
  3.         <setting name="lazyLoadingEnabled" value="true" />  
  4.         <!-- 将积极加载改为消息加载即按需加载 -->  
  5.         <setting name="aggressiveLazyLoading" value="false"/>  
  6.     </settings>  

lazyLoadingEnabled:设置懒加载,默认为false。如果为false:则所有相关联的都会被初始化加载。

aggressiveLazyLoading:默认为true。当设置为true时,懒加载的对象可能被任何懒属性全部加载;否则,每个属性按需加载。

三、使用collection实现延迟加载

同理。

四、思考总结

1.不使用mybatis提供的association及collection中的延迟加载功能,如何实现延迟加载?

实现思路:

定义两个mapper方法:

1)  查询订单列表  2)根据用户id查询用户信息

先去查询第一个mapper方法,获取订单信息列表;在程序中(service),按需去调用第二个mapper方法去查询用户信息。

2.总结

使用延迟加载方法,先去查询简单的sql(最好单表,也可关联查询),再去按需加载关联查询的其他信息。

分享到:
评论

相关推荐

    mybatis延迟加载样例

    mybatis 延迟加载样例,附uml图说明

    Mybatis延迟加载和缓存

    Mybatis延迟加载和缓存

    MyBatis懒加载(延迟加载)

    MyBatis懒加载的Demo

    mybatis3--延迟加载,缓存

    mybatis3--延迟加载,缓存

    mybatis教程之延迟加载详解

    本篇文章主要介绍了mybatis教程之延迟加载详解。详细介绍了延迟加载的意义和用法实现,有兴趣的可以了解一下

    Mybatis中的延迟加载案例解析

    主要介绍了Mybatis中的延迟加载,场景结合案例分析非常不错,具有参考借鉴价值,需要的朋友可以参考下

    Mybatis延迟加载的实现方式

    主要介绍了Mybatis延迟加载的实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    mybatis的延迟加载,全局加载及一级缓存及二级缓存

    mybatis的延迟加载,全局加载及一级缓存及二级缓存, 包括完整的笔记及代码演示, 实操性强,讲解充分

    15MyBatis延迟加载.md

    15MyBatis延迟加载.md

    mybatis的关联映射及延迟加载的使用

    java学习-java学习-mybatis的关联映射(一对一关联映射/一对多关联映射/多对多关联映射),mybatis的延迟加载的好处及使用。

    Mybatis查询延迟加载详解及实例

    主要介绍了Mybatis查询延迟加载详解及实例的相关资料,Mybatis的延迟加载默认是关闭的,即默认是一次就将所有的嵌套SQL一并查了将对象所有的信息都查询出来。开启延迟加载有两种方式,需要的朋友可以参考下

    Mybatis延迟加载和缓存(基于XML配置).zip

    Mybatis延迟加载和缓存的相关配置和使用。案例中代码演示了使用步骤,包含详细注释)

    MyBatis入门以及提高

    基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开发)问题总结 mybatis框架原理 ... mybatis延迟加载 mybatis查询缓存(一级缓存、二级缓存) mybaits和spring进行整合(掌握) mybatis逆向工程

    什么是延迟加载.docx

    介绍了mybatis的延迟加载以及开启延迟加载的方法,内容不多,不过容易理解,看懂之后应该是可以理解的,希望想学习的朋友通过这个文档能有所收益

    mybatis中延迟加载Lazy策略的方法

    主要介绍了mybatis中延迟加载Lazy策略,需要的朋友可以参考下

    MyBatis经典面试题详细

    MyBatis简介 MyBatis是什么? ORM是什么 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里? 传统JDBC开发存在的问题 JDBC编程有哪些不足之处...Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?

    Mybatis面试题(含答案)_.pdf

    8. Mybatis 是否支持延迟加载?如果支持,它的实现原理是什 么? 9. Mybatis 映射文件中,如果 A 标签通过 include 引用了 B 标 签的内容,请问,B 标签能否定义在 A 标签的后面,还是说 必须定义在 A 标签的前面? ...

    Mybatis延迟加载和缓存深入讲解

    主要给大家介绍了关于Mybatis延迟加载和缓存的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧

    mybatis学习笔记

    5.6.2 一对一查询延迟加载 56 5.6.3 一对多延迟加载 59 5.6.4 延迟加载小结 59 6 查询缓存 59 6.1 mybatis缓存介绍 59 6.2 一级缓存 60 6.2.1 原理 60 6.2.2 测试1 61 6.2.3 测试2 61 6.3 二级缓存 62 6.3.1 原理 62...

Global site tag (gtag.js) - Google Analytics