做ui设计工资一般多少关于进一步优化 广州
MyBatis 的多表查询主要涉及关联查询(如一对一、一对多、多对多),可以通过 ResultMap 嵌套映射实现。
1. 嵌套ResultMap (关联查询)
通过 <association> (一对一)和 <collection> (一对多)标签嵌套映射关联对象。
示例:订单(Order)与用户(User)的一对一关系:
<resultMap id="OrderWithUserMap" type="Order"><id property="id" column="order_id"/><result property="orderNo" column="order_no"/><!-- 一对一映射用户 --><association property="user" javaType="User"><id property="id" column="user_id"/><result property="name" column="user_name"/></association>
</resultMap><select id="getOrderWithUser" resultMap="OrderWithUserMap">SELECT o.id AS order_id, o.order_no, u.id AS user_id, u.name AS user_nameFROM orders oLEFT JOIN user u ON o.user_id = u.id
</select>
2. 一对多关系(如订单与订单项)
使用 <collection> 标签映射子对象集合。
<resultMap id="OrderWithItemsMap" type="Order"><id property="id" column="order_id"/><result property="orderNo" column="order_no"/><!-- 一对多映射订单项 --><collection property="items" ofType="OrderItem"><id property="id" column="item_id"/><result property="productName" column="product_name"/></collection>
</resultMap><select id="getOrderWithItems" resultMap="OrderWithItemsMap">SELECT o.id AS order_id, o.order_no,i.id AS item_id, i.product_nameFROM orders oLEFT JOIN order_item i ON o.id = i.order_id
</select>
3. 多对多关系(如用户与角色)
通过中间表关联,结合 <collection> 实现。
<resultMap id="UserWithRolesMap" type="User"><id property="id" column="user_id"/><result property="name" column="user_name"/><collection property="roles" ofType="Role"><id property="id" column="role_id"/><result property="name" column="role_name"/></collection>
</resultMap><select id="getUserWithRoles" resultMap="UserWithRolesMap">SELECT u.id AS user_id, u.name AS user_name,r.id AS role_id, r.name AS role_nameFROM user uLEFT JOIN user_role ur ON u.id = ur.user_idLEFT JOIN role r ON ur.role_id = r.id
</select>