mybatis 延迟加载

一、基本概念

现有如下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可以实现延时加载,减少不必要的查询,在需要时再进行查询,这样可以减少资源的消耗,提高性能。

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

猜你喜欢

转载自www.cnblogs.com/wanghang-learning/p/9133908.html
今日推荐