通过前面的内容,可以知道通过resultMap元素可以实现mybatis的高级映射输出,association可以实现一对一高级映射,collection可以实现一对多高级映射,而association和collection还具有延迟加载的功能。

所谓的延迟加载就是先查询主表信息,主表信息查询完毕后,再按照主表相关数据完成关联表信息的查询,这就是延迟加载。即:在SQL查询中,先查询一部分(主表信息),再查询另一部分(关联表信息)。

比如前面操作的查询用户订单数据,并关联查询用户的数据信息,先查询主表用户订单的信息,查询完成后,再按照主表的数据,按需要去查询关联表中的数据。如下图情景:用户点击黑色三角按钮,再将对应的订单明细查出展示;

 >入门程序:

需求:订单表关联查询用户表

在实现查询订单表并关联查询用户表的SQL查询中,SQL语句书写形式如下:

对上面的SQL语句进行拆分,按照延迟加载的本质,即先查询主表,再查询关联表,拆分如下:

1.select * from orders

2.select * from user where user_id=?

 步骤:

(1)开启懒加载

<!--MyBatis的全局参数设置--><settings><setting name="lazyLoadingEnabled" value="true"/><setting name="aggressiveLazyLoading" value="false"/></settings>

(2)Mapper配置

    <!--延迟执行的Sql--><resultMap type="com.langsin.pojo.User" id="userMap"><id column="user_id" property="userId"/><result column="user_name" property="userName"/><result column="role_code" property="roleCode"/><result column="user_pass" property="password"/><result column="is_login" property="isLogin"/></resultMap><select id="queryUserById" parameterType="Integer" resultMap="userMap">select * from user where user_id=#{value}</select><!-- orderBean中既有Order 也有User 只有当查看其User属性时,才会执行association延迟执行SQL语句 --><!-- association的select属性:延迟执行的Sqlcolumn属性:执行sql的传参列(两表关联查询的关联列)--><resultMap type="orderBean" id="orderLazyMap"><id column="order_id" property="orderId"/><result column="user_id" property="userId"/><result column="order_num" property="orderNum"/><result column="order_date" property="orderDate"/><result column="payment" property="payment"/><association property="user" javaType="user" select="queryUserById" column="user_id"></association></resultMap><select id="queryOrderLazyLoadingUser" parameterType="Integer" resultMap="orderLazyMap">select* from orders where order_id=#{value}</select>

(3)Mapper接口

public interface UserMapper {public OrderBean queryOrderLazyLoadingUser(Integer orderId) throws Exception;
}

(4)测试类

@Testpublic void queryOrderLazyLoadingUser() throws Exception{  Integer orderId=1111;UserMapper mapper=session.getMapper(UserMapper.class);OrderBean orderBean = mapper.queryOrderLazyLoadingUser(orderId);System.out.println(orderBean.getOrderDate());//System.out.println(orderBean.getUser());session.close();}

当将注释放开,查看User属性,才会执行延迟的Sql:

DEBUG [main] - ==>  Preparing: select* from orders where order_id=?
DEBUG [main] - ==> Parameters: 1111(Integer)
DEBUG [main] - <==      Total: 1
1996-12-12
DEBUG [main] - ==>  Preparing: select * from user where user_id=?
DEBUG [main] - ==> Parameters: 2(Integer)
DEBUG [main] - <==      Total: 1
User [userId=2, userName=lisi, password=123789, roleCode=admin, cname=weiwei, telphone=17864195335, address=山东济南, isLogin=0]

Mybatis高级应用 延迟加载相关推荐

  1. mybatis高级映射(一对一,一对多,多对多)

    http://www.cnblogs.com/selene/p/4627446.html 阿赫瓦里 生命对于某些人来说,一直都是美丽的,因为这些人的一生都在为某个梦想而奋斗!!! 博客园 首页 新随笔 ...

  2. SpringBoot整合Mybatis(高级)

    SpringBoot整合Mybatis(高级) 文章目录 SpringBoot整合Mybatis(高级) 前言 基础环境配置 增删改查 ResultMap 复杂查询 多对一 一对多 动态SQL if ...

  3. MyBatis框架:延迟加载策策略、一级缓存、二级缓存

    MyBatis框架:延迟加载策略和缓存 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用association实现延迟加载 1.3.1 账户的持久层DAO接口 1. ...

  4. mybatis学习(55):延迟加载

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

  5. Mybatis中的延迟加载的使用方法

    Mybatis中的延迟加载的使用方法 在Mybatis中查询订单,然后带出商品信息和快递信息的配置方法 orderMapper.xml配置如下 <?xml version="1.0&q ...

  6. 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询

    目录 Mybatis 复杂映射&配置文件深入 一 Mybatis高级查询 1.1 ResutlMap属性 1.2 多条件查询(三种) 1.3 模糊查询 二 Mybatis映射文件深入 2.1 ...

  7. 【Mybatis高级映射】一对一映射、一对多映射、多对多映射

    前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...

  8. 【MyBatis框架】高级映射-延迟加载

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

  9. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存

    设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --><settings& ...

最新文章

  1. 【Oracle】函数简介与入门
  2. Python:进阶操作(1)
  3. OpenCASCADE绘制测试线束:拓扑命令之拓扑和几何分析
  4. 浏览器直接访问Linux云服务器下的文件
  5. ELF Format 笔记(七)—— 符号表
  6. AC_Dream 1224 Robbers(贪心)
  7. 中关村win11 32位官方原版iso文件v2021.08
  8. mybatis3 没有生成example_网站图片尺寸自动生成
  9. 爬虫-代理的爬取练习191110
  10. Spring Boot:(二)启动原理解析
  11. mysql触发器不能alter
  12. java的反射机制--关于类中属性的反射。
  13. 【PL/SQL】开发程序
  14. vue快速复制快捷键_vue快捷键.doc
  15. 微型计算机用于梯群控制时 其优点是,下列根尖周病的治疗要求中,说法不对的是A.要求无菌操作技术B.根管内应为无菌环境C.炎症渗出物应...
  16. 持久层框架JPA与Mybatis该如何选型
  17. 【单片机学习笔记】(25):PID初识、门电路符号、H桥驱动电路、中断服务函数使用注意事项、SIM800C打电话发短信、OLED
  18. mysql临时表更新_MySql 临时表
  19. [iOS Animation]-CALayer 变换-灭点
  20. 求三角形外接圆 hdu4720

热门文章

  1. html弹性盒子自适应比例,CCS弹性盒子中间自适应怎么设置
  2. 分库分表解决方案之MyCat
  3. 关于多线程的几个问题
  4. java数据结构之快速排序
  5. Qlik 助力安井食品实现企业智能决策、高效运营
  6. [leetcode-347-Top K Frequent Elements]
  7. 思科设备debug命令的使用
  8. MoreResult 同事返回多个数据集
  9. Hello,Views(六)下拉框Spinner(附源码)
  10. http 几种请求方法的差别