MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

时间:2022-06-14 09:35:11

我们现在数据库里有两个表:Country,Minister,我们现在通过查询Country的cid来得到Minister里的的信息。

两个表如图:

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

Country

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

Minister

一、多表连接查询:

创建接口: Country selectCountryById(int cid);

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

country类

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

minister类

映射文件:

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

映射文件

测试类:

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

测试类

查询结果:

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)


对映射文件里的resultMap的详解:

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

详解resultMap

  • <id>:主键字段

  • <result>:普通字段

  • type:整体封装出的类型

  • column:字段名(表里定义好的)

  • property:关联属性(查询出来的结果封装成Country里的哪个属性)

  • <collection>:集合封装

  • ofType:指定属性类型(关联属性是什么类型)

集合封装说明:字段mname,mid都不是Country里的,而是Minister里的,但是我们在country类里定义了Set<Minister> ministers;集合,这里我们将两个属性封装到ministers集合里,也就封装到了Minister的对象里。


二、多表单独查询:

除了上面的查询方式外我们还可以这样查询——多表单独查询。

映射文件:

MyBatis:关联查询——一对多 多表连接、单独查询(详解resultMap)

这种方式里的Minister属性mid、mname是通过查询得到的,而非定义包装的。

将查询到的mid、mname再传给Country类里的ministers集合。