系列Mybatis一对多查询,只查询出了一条记录
在MyBatis中实现一对多查询,通常需要定义两个实体类,并在映射文件中配置一对多的关系。以下是一个简单的例子:
假设我们有两个实体类,一个是Order
订单类,一个是Item
订单项类。每个订单可以包含多个订单项。
- Order.java
public class Order {
private Integer id;
private String orderNumber;
private List<Item> items; // 一对多关系,一个订单有多个订单项
// 省略getter和setter方法...
}
- Item.java
public class Item {
private Integer id;
private String itemName;
// 省略getter和setter方法...
}
- OrderMapper.xml 中的配置
<mapper namespace="com.example.mapper.OrderMapper">
<resultMap id="OrderResultMap" type="Order">
<id property="id" column="id"/>
<result property="orderNumber" column="order_number"/>
<collection property="items" ofType="Item">
<id property="id" column="item_id"/>
<result property="itemName" column="item_name"/>
</collection>
</resultMap>
<select id="selectOrderWithItems" resultMap="OrderResultMap">
SELECT o.id, o.order_number, i.id as item_id, i.item_name
FROM orders o
LEFT JOIN order_items oi ON o.id = oi.order_id
LEFT JOIN items i ON oi.item_id = i.id
WHERE o.id = #{id}
</select>
</mapper>
- OrderMapper.java 接口
public interface OrderMapper {
Order selectOrderWithItems(Integer id);
}
在这个例子中,<collection>
标签定义了一对多的映射关系,其中property
指定了Order实体类中的属性,ofType
指定了集合中元素的类型。
在MyBatis配置文件中注册OrderMapper.xml,并在需要查询订单信息的地方调用selectOrderWithItems
方法,MyBatis将自动处理一对多的关系并返回包含订单项的订单信息。
评论已关闭