在 MyBatis 中进行多表关联查询通常有两种方式:嵌套查询和结果映射。
- 嵌套查询: 嵌套查询是指在一个 SQL 语句中通过子查询来获取关联表的数据。可以使用标准的 SQL 语法,在 WHERE 子句中使用子查询来连接多个表,并通过 JOIN 或子查询来获取相关数据。
示例: - xmlCopy Code
<selectid="getUserOrder"parameterType="int"resultMap="userOrderResult">
SELECT * FROM user
WHERE id IN (
SELECT user_id FROM orders
WHERE status = 'completed'
)
</select>
- 在这个示例中,通过子查询将
user
表和orders
表进行了关联查询,查询出了满足条件的用户订单。 - 结果映射: 结果映射是指通过 MyBatis 的结果映射功能将多个表的数据关联起来。可以通过定义合适的结果映射,将多个表的数据映射到一个对象中。
示例: - xmlCopy Code
<resultMapid="userOrderResult"type="User">
<idproperty="id"column="id"/>
<resultproperty="name"column="name"/>
<collectionproperty="orders"ofType="Order">
<idproperty="id"column="order_id"/>
<resultproperty="status"column="status"/>
</collection></resultMap><selectid="getUserOrder"parameterType="int"resultMap="userOrderResult">
SELECT u.id, u.name, o.id AS order_id, o.status
FROM user u
JOIN orders o ON u.id = o.user_id
WHERE u.id = #{userId}
</select>
- 在这个示例中,通过定义合适的结果映射,将
user
表和orders
表的数据关联到一个User
对象中。使用 JOIN 语句将两个表连接起来,并在结果映射中定义了对象属性和列名的映射关系。
这两种方式各有优劣,具体选择哪种方式取决于实际场景和需求。嵌套查询适用于一些简单的关联查询,而结果映射则适用于复杂的多表关联查询,能够更灵活地处理结果数据。根据具体情况选择合适的方式来实现多表关联查询