mybatis collection标签属性传参
时间: 2025-01-20 20:55:41 浏览: 89
### MyBatis 中 `collection` 标签的属性及参数传递方法
#### 一、`collection` 标签概述
`collection` 元素用于处理一对多的关系,在 Java Bean 的某个复杂类型属性上进行映射,该属性通常是一个集合列表。这使得可以表示一个实体对象内嵌套多个子对象的情况。
#### 二、`collection` 标签的主要属性说明
| 属性名 | 描述 |
| --- | --- |
| **property** | 对应于 Java 类中的一对多关联属性名称,通常是 List/Set/Map 等类型的字段[^1]。|
| **ofType/itemType/javaType** | 子元素的数据类型,指定集合里存储的对象的具体类型。|
| **column** | 数据库列名或别名,当 SQL 查询返回的结果集中存在此列时会触发对该属性的赋值操作。|
| **select** | 嵌套查询语句 ID,通过执行另一个 Select 映射来获取子项数据并填充到当前对象的相关联集合属性中。|
#### 三、参数传递方式
在实际开发过程中,向 `collection` 关联查询传递参数的方式有两种:
##### 方式一:直接利用父级查询条件作为子查询输入
如果父子表之间有关联字段,则可以直接基于这些字段构建联合查询逻辑而无需额外提供其他参数;此时只需确保主查询已包含了必要的过滤条件即可满足需求。
##### 方式二:显式设置参数变量
对于某些特殊场景下可能需要单独为子查询设定特定筛选规则的情形,可通过如下所示的方法实现:
- 使用 `<foreach>` 动态SQL标签配合自定义命名空间下的接口函数完成批量加载;
- 或者借助 OGNL 表达式的灵活性来进行更复杂的表达式计算与转换工作。
```xml
<!-- 示例代码 -->
<resultMap id="orderResultMap" type="Order">
<!-- ...省略部分配置... -->
<collection property="items"
ofType="Item"
column="{orderId=id}"
select="findItemsByOrderId"/>
</resultMap>
<select id="findItemsByOrderId" parameterType="map" resultType="Item">
SELECT *
FROM item t
WHERE t.order_id = #{orderId}
</select>
```
上述例子展示了如何在一个订单 Order 实体类中加入商品 Item 列表,并且指定了两者间的外键约束关系——即 order_item 表内的 order_id 字段对应着 orders 表中的主键 id 。 同时还设置了 `column` 参数用来告知框架应该采用哪个字段去匹配目标记录集。
阅读全文
相关推荐















