mybatis collection 使用方法
时间: 2023-12-08 22:32:39 浏览: 96
Mybatis中的Collection标签用于处理一对多的关系,可以将一个查询结果集映射成多个对象,也可以将多个对象映射成一个查询结果集。
使用方法:
1.在mapper.xml文件中编写SQL语句,并使用collection标签进行映射。
例如:查询一个订单及其所有的订单项
```
<select id="findOrderWithOrderItems" resultType="Order">
select * from orders where id=#{id}
<collection property="orderItems" ofType="OrderItem"
select="com.example.mapper.OrderItemMapper.findOrderItemsByOrderId"
column="order_id"/>
</select>
```
2.在相应的实体类中定义对应的属性,并编写getter和setter方法。
例如:Order.java
```
public class Order {
private Integer id;
private Date createTime;
private List<OrderItem> orderItems;
// getter and setter
}
```
3.在相应的Mapper接口中定义对应的方法,并使用@ResultMap注解进行映射。
例如:OrderMapper.java
```
public interface OrderMapper {
@ResultMap("orderMap")
@Select("select * from orders where id=#{id}")
Order findOrderWithOrderItems(Integer id);
}
```
4.在相应的Mapper.xml文件中定义对应的ResultMap。
例如:Order.xml
```
<resultMap id="orderMap" type="Order">
<id column="id" property="id"/>
<result column="create_time" property="createTime"/>
<collection property="orderItems" ofType="OrderItem">
<id column="id" property="id"/>
<result column="product_id" property="productId"/>
<result column="quantity" property="quantity"/>
</collection>
</resultMap>
```
5.调用Mapper接口中定义的方法进行查询。
例如:测试代码
```
Order order = orderMapper.findOrderWithOrderItems(1);
System.out.println(order.getId());
System.out.println(order.getCreateTime());
List<OrderItem> orderItems = order.getOrderItems();
for (OrderItem orderItem : orderItems) {
System.out.println(orderItem.getId());
System.out.println(orderItem.getProductId());
System.out.println(orderItem.getQuantity());
}
```
阅读全文