mybatisplus多对多关系查询
时间: 2023-07-22 09:43:19 浏览: 106
Mybatis-Plus 中多对多关系查询有以下两种方法:
1. 关联表查询
多对多关系需要通过一个中间表来实现。假设有三个表 A、B、C,其中 A 和 B 之间是多对多关系,中间表为 AB,B 和 C 之间也是多对多关系,中间表为 BC。现在需要查询 A 中所有数据及其关联的所有 C 数据。
首先在 A 实体类中定义一个 List<C> 类型的属性,用于存储与 A 关联的所有 C 数据。然后在 A 的 mapper.xml 文件中编写关联表查询的 SQL 语句,如下:
```
<select id="selectACList" resultMap="aResultMap">
SELECT a.*, c.*
FROM a
LEFT JOIN ab ON a.id = ab.a_id
LEFT JOIN b ON ab.b_id = b.id
LEFT JOIN bc ON b.id = bc.b_id
LEFT JOIN c ON bc.c_id = c.id
</select>
```
需要注意的是,resultMap="aResultMap" 中的 aResultMap 是定义在 mapper.xml 文件中的结果集映射,用于将查询结果映射到 A 实体类中。
2. 嵌套查询
另一种多对多关系查询的方法是使用嵌套查询。假设有三个表 A、B、C,其中 A 和 B 之间是多对多关系,中间表为 AB,B 和 C 之间也是多对多关系,中间表为 BC。现在需要查询 A 中所有数据及其关联的所有 C 数据。
首先在 A 实体类中定义一个 List<B> 类型的属性,用于存储与 A 关联的所有 B 数据。然后在 B 实体类中定义一个 List<C> 类型的属性,用于存储与 B 关联的所有 C 数据。最后在 A 的 mapper.xml 文件中编写嵌套查询的 SQL 语句,如下:
```
<select id="selectACList" resultMap="aResultMap">
SELECT a.*
FROM a
LEFT JOIN ab ON a.id = ab.a_id
LEFT JOIN b ON ab.b_id = b.id
</select>
<resultMap id="aResultMap" type="A">
<collection property="bList" ofType="B">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="cList" ofType="C">
<id property="id" column="id"/>
<result property="name" column="name"/>
</collection>
</collection>
</resultMap>
```
需要注意的是,resultMap 中的 collection 标签用于表示嵌套查询,ofType 属性用于指定关联实体的类型。在 A 实体类中,bList 属性的元素类型为 B,而在 B 实体类中,cList 属性的元素类型为 C。
阅读全文