Mybatis高级应用 延迟加载
通过前面的内容,可以知道通过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高级应用 延迟加载相关推荐
- mybatis高级映射(一对一,一对多,多对多)
http://www.cnblogs.com/selene/p/4627446.html 阿赫瓦里 生命对于某些人来说,一直都是美丽的,因为这些人的一生都在为某个梦想而奋斗!!! 博客园 首页 新随笔 ...
- SpringBoot整合Mybatis(高级)
SpringBoot整合Mybatis(高级) 文章目录 SpringBoot整合Mybatis(高级) 前言 基础环境配置 增删改查 ResultMap 复杂查询 多对一 一对多 动态SQL if ...
- MyBatis框架:延迟加载策策略、一级缓存、二级缓存
MyBatis框架:延迟加载策略和缓存 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用association实现延迟加载 1.3.1 账户的持久层DAO接口 1. ...
- mybatis学习(55):延迟加载
MyBatis中的延迟加载,也称为懒加载,是指在进行关联查询时,按照设置延迟规则推迟对关联对象的select查询.延迟加载可以有效的减少数据库压力. 注意:MyBatis的延迟加载只是对关联对象的查询 ...
- Mybatis中的延迟加载的使用方法
Mybatis中的延迟加载的使用方法 在Mybatis中查询订单,然后带出商品信息和快递信息的配置方法 orderMapper.xml配置如下 <?xml version="1.0&q ...
- 2.4.3 Mybatis 高级查询, 复杂映射, 返回主键, 动态SQL if, set, foreach, 核心配置文件深入,plugins标签, 多表查询, 嵌套查询
目录 Mybatis 复杂映射&配置文件深入 一 Mybatis高级查询 1.1 ResutlMap属性 1.2 多条件查询(三种) 1.3 模糊查询 二 Mybatis映射文件深入 2.1 ...
- 【Mybatis高级映射】一对一映射、一对多映射、多对多映射
前言 当我们学习heribnate的时候,也就是SSH框架的网上商城的时候,我们就学习过它对应的高级映射,一对一映射,一对多映射,多对多映射.对于SSM的Mybatis来说,肯定也是差不多的.既然开了 ...
- 【MyBatis框架】高级映射-延迟加载
延迟加载 1.什么是延迟加载 resultMap可以实现高级映射(使用association.collection实现一对一及一对多映射),association.collection具备延迟加载功能 ...
- mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存
设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --><settings& ...
最新文章
- 【Oracle】函数简介与入门
- Python:进阶操作(1)
- OpenCASCADE绘制测试线束:拓扑命令之拓扑和几何分析
- 浏览器直接访问Linux云服务器下的文件
- ELF Format 笔记(七)—— 符号表
- AC_Dream 1224 Robbers(贪心)
- 中关村win11 32位官方原版iso文件v2021.08
- mybatis3 没有生成example_网站图片尺寸自动生成
- 爬虫-代理的爬取练习191110
- Spring Boot:(二)启动原理解析
- mysql触发器不能alter
- java的反射机制--关于类中属性的反射。
- 【PL/SQL】开发程序
- vue快速复制快捷键_vue快捷键.doc
- 微型计算机用于梯群控制时 其优点是,下列根尖周病的治疗要求中,说法不对的是A.要求无菌操作技术B.根管内应为无菌环境C.炎症渗出物应...
- 持久层框架JPA与Mybatis该如何选型
- 【单片机学习笔记】(25):PID初识、门电路符号、H桥驱动电路、中断服务函数使用注意事项、SIM800C打电话发短信、OLED
- mysql临时表更新_MySql 临时表
- [iOS Animation]-CALayer 变换-灭点
- 求三角形外接圆 hdu4720