博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mybatis 延迟加载
阅读量:7091 次
发布时间:2019-06-28

本文共 774 字,大约阅读时间需要 2 分钟。

一、基本概念

现有如下vo和pojo

         

在mapper文件中可以使用<associattion>和<resultMap>通过关联查询将OrderVo对象一步到位完成映射(此处不细说)。而延迟加载就是将这两个对象对应的表分步查询,先查询OrderVo所需字段,然后在调用OrderVo对象的user字段时再查询user对象所需字段。

 

二、实现步骤

1.mapper文件中写好两条SQL语句,定义resultMap。

 

查询user所需的参数user_id必须在查询orderVo时查询出来,因为它是要作为参数参与第二次查询的。

 

<association>中的select属性指定第二次查询的SQL语句,column指定传入的参数。

 

 2.开启延时加载

延时加载默认是关闭的,必须手动开启。在mybatis核心配置文件中加入如下片段,注意<settings>在文件中的相对位置

第一个属性表示开启延时加载,第二个属性表示将积极加载改为按需加载

 

三、调试分析

这里调用一个查询所有订单的接口,测试代码如下

 

执行完第二句时:

 

 

 

通过变量和日志的查看,发现只执行了第一条SQL,并且确实没有查询user中的字段,此时user == null

 

执行完第三句时:

可以发现,执行了一条新的SQL,正是通过id查询user字段的,此时该OrderVo对象的user也不再为空。而list中的其他order.user依然为空,这里就证实了延时加载确实是按需查询的。

 

四、总结

mybatis可以实现延时加载,减少不必要的查询,在需要时再进行查询,这样可以减少资源的消耗,提高性能。

    本文个人编写,水平有限,如有错误,恳请指出,欢迎讨论分享。

 

转载于:https://www.cnblogs.com/wanghang-learning/p/9133908.html

你可能感兴趣的文章
Ubuntu 14.04 安装 qemu
查看>>
Android 软键盘弹出,界面整体上移的问题
查看>>
高并发大流量网站架构简单思路
查看>>
Android -- 贝塞尔实现水波纹动画(划重点!!)
查看>>
shell脚本监测文件变化
查看>>
UVA 1426 - Discrete Square Roots(数论)
查看>>
怎样优化cocos2d/x程序的内存使用和程序大小
查看>>
Redis的三种启动方式
查看>>
YII框架分析笔记2:组件和事件行为管理
查看>>
iptables启动脚本分析
查看>>
进阶之路(基础篇) - 013 通过读取可变电阻值调节流水灯的速度
查看>>
GG链路过多port不足导致的报错OGG-01223
查看>>
自然语言交流系统 phxnet团队 创新实训 个人博客 (八)
查看>>
talk is cheap, show me the code——dcgan,wgan,wgan-gp的tensorflow实现
查看>>
Kettle学习系列之数据仓库、数据整合、ETL、ELT和EII之间的区别?
查看>>
把握linux内核设计思想系列
查看>>
zoj1003 Crashing Balloon
查看>>
在EA中将画出的ER图转换成SQL脚本
查看>>
Android Studio怎样删除module
查看>>
selective search生成.mat文件
查看>>