溫馨提示×

mybatis的collection嵌套查詢怎么做

小樊
296
2024-07-19 21:33:46
欄目: 編程語言

在MyBatis中,可以使用collection嵌套查詢來實現(xiàn)一對多的關聯(lián)查詢。實現(xiàn)collection嵌套查詢的步驟如下:

  1. 在Mapper接口中定義兩個方法,一個用于查詢主表數(shù)據(jù),另一個用于查詢關聯(lián)表數(shù)據(jù)。例如:
public interface UserMapper {
    User selectUserById(Integer userId);
    
    List<Order> selectOrdersByUserId(Integer userId);
}
  1. 在Mapper XML文件中定義兩個對應的SQL語句,分別用于查詢主表數(shù)據(jù)和關聯(lián)表數(shù)據(jù)。例如:
<!-- 查詢用戶信息 -->
<select id="selectUserById" parameterType="int" resultType="User">
    SELECT * FROM user WHERE id = #{userId}
</select>

<!-- 查詢用戶的訂單信息 -->
<select id="selectOrdersByUserId" parameterType="int" resultType="Order">
    SELECT * FROM orders WHERE user_id = #{userId}
</select>
  1. 在主表查詢的結果對象中添加關聯(lián)表數(shù)據(jù)的集合屬性,并在Mapper XML文件中使用collection嵌套查詢來關聯(lián)查詢數(shù)據(jù)。例如:
public class User {
    private Integer id;
    private String name;
    private List<Order> orders;
    
    // getters and setters
}
<!-- 查詢用戶信息及其訂單信息 -->
<select id="selectUserById" parameterType="int" resultType="User">
    SELECT * FROM user WHERE id = #{userId}
</select>

<resultMap id="userMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <collection property="orders" ofType="Order">
        <result column="order_id" property="orderId"/>
        <result column="order_name" property="orderName"/>
    </collection>
</resultMap>
  1. 在Service層調用Mapper接口的方法,實現(xiàn)主表和關聯(lián)表數(shù)據(jù)的關聯(lián)查詢。例如:
@Service
public class UserService {
    
    @Autowired
    private UserMapper userMapper;
    
    public User getUserById(Integer userId) {
        User user = userMapper.selectUserById(userId);
        List<Order> orders = userMapper.selectOrdersByUserId(userId);
        user.setOrders(orders);
        return user;
    }
}

通過以上步驟,就可以實現(xiàn)使用collection嵌套查詢來關聯(lián)查詢一對多的數(shù)據(jù)。在查詢用戶信息的同時,也可以查詢用戶的訂單信息,并將其封裝到User對象中返回。

0