mybatis foreach 判断list中某个属性
时间: 2023-11-08 10:57:13 浏览: 101
mybatis foreach批量插入数据:Oracle与MySQL区别介绍
5星 · 资源好评率100%
在 MyBatis 中使用 foreach 标签时,可以使用 open、close、separator 和 item 属性来定制循环体中的 SQL 语句。如果想在循环体中判断 List 中某个属性的值,可以使用 OGNL 表达式。
举个例子,假设有一个 User 对象,其中包含了一个 List<Address> 属性,而 Address 对象包含了一个 boolean 类型的属性 isDefault,表示该地址是否是用户的默认地址。如果要查询某个用户的所有地址并将默认地址放在前面,可以按如下方式编写 SQL 语句:
```
<select id="getUserAddresses" resultType="Address">
SELECT * FROM address
WHERE user_id = #{userId}
<foreach collection="addresses" item="address" separator="UNION">
<if test="address.isDefault">
SELECT #{address.id} AS id, #{address.userId} AS user_id, #{address.street} AS street, #{address.city} AS city, #{address.state} AS state, #{address.zip} AS zip, #{address.isDefault} AS is_default
</if>
</foreach>
<foreach collection="addresses" item="address" separator="UNION">
<if test="!address.isDefault">
SELECT #{address.id} AS id, #{address.userId} AS user_id, #{address.street} AS street, #{address.city} AS city, #{address.state} AS state, #{address.zip} AS zip, #{address.isDefault} AS is_default
</if>
</foreach>
</select>
```
在上面的 SQL 语句中,使用了两个 foreach 标签来循环遍历 List<Address>,其中第一个循环体中使用了 if 标签来判断 Address 对象的 isDefault 属性是否为 true,如果是则将该地址作为默认地址放在前面,否则将该地址放在后面。注意,这里 address.isDefault 中的 isDefault 就是 Address 对象中的 isDefault 属性,可以直接使用 OGNL 表达式来访问。
阅读全文