MyBatis中association,collection多表查询(resultMap高级映射)笔录

在我们使用mybatis去实现多表查询的时候必不可少的要使用映射关系resultMap

在多表查询中的一对多关系中,有两种场景,现在有两张表user表和department表,user为多,department为少,两表是一对多的关系

场景一:查询user表并且把每个user对象的department查询出现来

场景二:查询department表并且把每个department所对应的所有user查询出来

一.使用association解决场景一

在mybatis中,在配置路径中可以通过setting标签来设置是否用默认的映射方法,所谓的默认的映射方法,就是数据库中的字段名称和你javabean中的属性名称一致(就算不一致,也能通过下划线驼峰法达到一致),如果我们想改变这种映射方法尼?可以在配置文件中:

那么在sqlMapping的配置文件中:

首先我们先定义一个resultMap,type属性表示我们要对哪个javabean使用映射,然后在我们想要用这个resultMap的sql语句中使用resultMap这个属性(即使用对应的id)

我这里是创建了两个javabean对象即对应了两张表,分别是user和department(一对多),id是主键的映射规则,result为其他字段的映射规则,这里看最后的两个result,列did(上面的sql中使用了别名,为什么要使用别名?因为user表和department表都有id字段,所以不适用别名的话mybatis会不知道哪个映射哪个),后面的property中写的是department.id,department是user对象中的属性名,所以必须对应上,id为department这个对象的id属性。

以上是使用级联的方式进行映射

下面可以使用association的方式进行映射

 
 

使用association还能实现分步查询,比如说上面的user表和department的联动的查询,我们都是用的select * from user,department或者使用join关键字进行查询,其实我们可以看作是分两步来查询,一个先根据id查出user,再根据查出的user的dept_id字段去查询department表,而用association可以实现分步查询

看代码:

首先我们按照上面说的第一步,根据id查询出user,配置resultMap,在resultMap中有一个association,里面有一个select和column属性,select其实就是第二步中根据查出的user的dept_id去查询出department表,column就是那个第一步查出来的dept_id,而select就是查询Department的mapper

 二.使用collection解决场景二:

sql映射文件:

 department对应的javabean:

最后输出查询出的department中list<user>的结果:

 和association一样,collection也能实现分步查询:

第一步:根据id查询出department

第二步:根据第一步查询出的department的id去查询user表中的user

结果和上面的一样

猜你喜欢

转载自blog.csdn.net/weixin_37689658/article/details/84502615
今日推荐