示例mybatis的collection使用
时间: 2023-07-03 20:09:53 浏览: 91
MyBatis 的 collection 元素可以用于处理一对多的关联查询,它可以将一个集合作为参数传递给 SQL 语句,从而实现对集合的批量操作。
下面是一个示例:
```
<select id="selectOrder" resultMap="orderResultMap">
SELECT * FROM orders WHERE order_id = #{orderId}
</select>
<resultMap id="orderResultMap" type="Order">
<id property="id" column="order_id" />
<result property="orderNo" column="order_no" />
<result property="status" column="status" />
<collection property="items" ofType="OrderItem">
<id property="id" column="item_id" />
<result property="name" column="item_name" />
<result property="price" column="price" />
</collection>
</resultMap>
```
在上面的示例中,我们定义了一个 select 标签和一个 resultMap 标签,其中 resultMap 标签定义了一个 Order 对象和一个 OrderItem 集合,它们之间是一对多的关系。
当执行 selectOrder 方法时,MyBatis 会根据 orderResultMap 映射规则将查询结果映射为一个 Order 对象,其中 Order 对象的 items 属性是一个 OrderItem 集合,它会自动从数据库中查询出来并填充到集合中。
注意,这里的 collection 元素的属性包括 property(集合属性名)、ofType(集合元素类型)等。在 SQL 语句中,我们可以使用 #{propertyName} 占位符来引用集合属性。例如:
```
<select id="selectOrdersByUser" resultMap="orderResultMap">
SELECT * FROM orders WHERE user_id = #{userId}
<foreach item="item" index="index" collection="itemIds" open="AND order_id IN (" separator="," close=")">
#{item}
</foreach>
</select>
```
在上面的示例中,我们使用了 foreach 元素来遍历 itemIds 集合,并将其中的元素作为参数传递给 SQL 语句。注意,在 SQL 语句中,我们使用了 IN 关键字来查询多个订单,这个关键字中的参数是通过 foreach 元素动态生成的。
阅读全文