一对多 多对多 sql映射怎么在mapper中写
时间: 2024-02-21 16:57:35 浏览: 90
在mapper中进行一对多和多对多的SQL映射,可以使用MyBatis的关联查询功能。
一对多查询可以使用MyBatis的collection标签,示例代码如下:
```
<select id="selectOrderAndOrderDetailByOrderId" resultMap="orderDetailResultMap">
SELECT *
FROM orders
WHERE order_id = #{orderId}
</select>
<resultMap id="orderDetailResultMap" type="Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<collection property="orderDetails" ofType="OrderDetail">
<id property="id" column="detail_id"/>
<result property="productName" column="product_name"/>
<result property="productPrice" column="product_price"/>
</collection>
</resultMap>
```
多对多查询可以使用MyBatis的association标签,示例代码如下:
```
<select id="selectUserAndRoleByUserId" resultMap="userResultMap">
SELECT *
FROM user
WHERE user_id = #{userId}
</select>
<resultMap id="userResultMap" type="User">
<id property="id" column="user_id"/>
<result property="username" column="username"/>
<association property="roles" column="role_id" javaType="java.util.List" select="selectRoleByUserId"/>
</resultMap>
<select id="selectRoleByUserId" resultMap="roleResultMap">
SELECT r.*
FROM user_role ur
JOIN role r ON ur.role_id = r.role_id
WHERE ur.user_id = #{userId}
</select>
<resultMap id="roleResultMap" type="Role">
<id property="id" column="role_id"/>
<result property="name" column="role_name"/>
</resultMap>
```
以上示例代码仅供参考,具体的SQL语句和映射配置需要根据实际需求进行调整。
阅读全文