温馨提示×

mybatis的collection嵌套查询怎么做

小樊
196
2024-07-19 21:33:46
栏目: 编程语言

在MyBatis中,可以使用collection嵌套查询来实现一对多的关联查询。实现collection嵌套查询的步骤如下:

  1. 在Mapper接口中定义两个方法,一个用于查询主表数据,另一个用于查询关联表数据。例如:
public interface UserMapper {
    User selectUserById(Integer userId);
    
    List<Order> selectOrdersByUserId(Integer userId);
}
  1. 在Mapper XML文件中定义两个对应的SQL语句,分别用于查询主表数据和关联表数据。例如:
<!-- 查询用户信息 -->
<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. 在主表查询的结果对象中添加关联表数据的集合属性,并在Mapper XML文件中使用collection嵌套查询来关联查询数据。例如:
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接口的方法,实现主表和关联表数据的关联查询。例如:
@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;
    }
}

通过以上步骤,就可以实现使用collection嵌套查询来关联查询一对多的数据。在查询用户信息的同时,也可以查询用户的订单信息,并将其封装到User对象中返回。

0