java mybatis xml 三表联查写法
时间: 2023-11-16 17:05:04 浏览: 64
下面是一个示例,假设有三个表:user、order、item,它们之间的关系是:一个用户可以有多个订单,一个订单可以包含多个商品。
```xml
<select id="getUserOrdersItems" resultMap="userOrderItemMap">
SELECT
u.id AS user_id, u.name AS user_name,
o.id AS order_id, o.create_time AS order_create_time,
i.id AS item_id, i.name AS item_name, i.price AS item_price
FROM user u
JOIN `order` o ON u.id = o.user_id
JOIN order_item oi ON o.id = oi.order_id
JOIN item i ON oi.item_id = i.id
WHERE u.id = #{userId}
</select>
<resultMap id="userOrderItemMap" type="User">
<id column="user_id" property="id"/>
<result column="user_name" property="name"/>
<collection property="orders" ofType="Order">
<id column="order_id" property="id"/>
<result column="order_create_time" property="createTime"/>
<collection property="items" ofType="Item">
<id column="item_id" property="id"/>
<result column="item_name" property="name"/>
<result column="item_price" property="price"/>
</collection>
</collection>
</resultMap>
```
在上面的示例中,我们使用了 JOIN 操作将三个表连接起来,并使用 WHERE 子句过滤出指定用户的订单和商品信息。在 resultMap 部分,我们定义了三个嵌套的 collection,分别对应用户、订单、商品三个实体类的关联关系。这样查询结果就会被映射成一个 User 对象,其中 orders 属性是一个包含多个 Order 对象的集合,而每个 Order 对象又包含多个 Item 对象的集合。
阅读全文