如何通过MyBatis实现集合的关联查询

1066
2024/8/12 13:37:44
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在MyBatis中,可以通过使用<collection>标签来实现集合的关联查询。以下是一个示例:

在Mapper XML文件中定义关联查询:

<!-- 查询订单及其订单项 -->
<select id="getOrderWithItems" resultMap="orderWithItems" parameterType="int">
    SELECT * FROM orders WHERE id = #{id}
</select>

<resultMap id="orderWithItems" type="Order">
    <id property="id" column="id"/>
    <result property="orderNumber" column="order_number"/>
    <collection property="orderItems" ofType="OrderItem" column="order_id" select="getOrderItemsByOrderId"/>
</resultMap>

<select id="getOrderItemsByOrderId" resultMap="orderItemResultMap" parameterType="int">
    SELECT * FROM order_items WHERE order_id = #{id}
</select>

<resultMap id="orderItemResultMap" type="OrderItem">
    <id property="id" column="id"/>
    <result property="name" column="name"/>
    <result property="quantity" column="quantity"/>
</resultMap>

在Java代码中调用关联查询:

public Order getOrderWithItems(int orderId) {
    try(SqlSession sqlSession = sqlSessionFactory.openSession()) {
        OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
        return orderMapper.getOrderWithItems(orderId);
    }
}

以上示例中,Order类包含了一个List<OrderItem>类型的属性orderItems,通过在<resultMap>中使用<collection>标签来关联查询OrderItem对象并映射到orderItems属性中。在查询订单时,同时查询订单项,并将订单项关联到订单对象中。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: mybatis错误处理的方法有哪些