mybatis级联查询list_Mybatis:级联查询,association,分步延迟加载

数据库如图:

802e2e0399604b6a9612c89eb445d8f6.png

c041b99c38f3f5e1e45da77114a475cb.png

第一张图是user表,user表里的d_id保存的就是第二张表deptartment的id。意思是:2号员工李四的d_id =1 就意思是李四是开发部。

实体类:(注意这里实体类和数据库的字段都对不上,需要使用resultMap进行映射)

397cff832c33c1b527eb84b5891b5fda.png

5a5957d411c22574186bedc62fe0c4fb.png

现需求是根据用户id查出用户信息的同时,还要查出用户所在的部门(开发部还是测试部)

sql如下

f0be7b5b03cf94cadfe68425848c207e.png

我们可以看到 user的d_id 肯定是和 dept的id是一样的,现在一条记录里面有2个id列

7996ef8fb840dccaa6d7c81db52bdfc3.png

改个名字看看,重新写一下sql:

94e2b1c65add7abca023bcd6206e44e9.png

0d51112059303f081feffb1ccc120d7d.png

现在想一下 结果集怎么封装呢?resultType肯定不行。所以定义resultMap。

下来写xml

d2bb2c57e8fec5734cc0ba5f65384080.png

测试:

d3aa1062c503fff3123f605474f1b513.png

结果:

1b094995555f835c20b4e6086fa94f52.png

还可以这样写:用association 和上图一样因为dept_name 用了别名成了dep_name 所以column就是别名dep_name

ce113182402866dfb024f5047f92775b.png

结果是一样的。


上面的sql有点复杂了。 我们想一下

1934d86eb933af42f08f7875517f03a4.png

后面这个红框的列是 deptartment表的列。 再user表里保存了deptartment表的id 。 那么我们可以先根据user表的id把user的信息查出来,然后再根据user中的d_id 把user的部门查出来。

看下怎么实现:

828003bd70525842c39e635ae1b0da92.png

5a42d811ccf6302c959f9de88b3b1920.png

association中的select:

edd03d52954bd1bbfd6db0ec98d00735.png

或者这样写:(如果列多的话,配置一下这个类的resultmap映射,也是可以的。如果列多的话)

0b5827e5ba94e3fc00af5fadb13f387e.png

测试:

50d5eb4e98482caec65b14e17853ee41.png

以上这些 我们再查询user的同时,也把deptartment表中的部门信息都查出来了。而有时候我们不需要部门信息,这就造成了数据库的负担。此时可以使用延迟加载就ok了。settings配置

451d8be0facb657ee8efe02d97dfd753.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值