mybatis-plus foreach使用
时间: 2023-09-26 15:07:57 浏览: 181
MyBatis-Plus 提供了 `foreach` 标签,用于在 SQL 中动态生成 `IN`、`VALUES`、`SET` 等语句。以下是 `foreach` 的使用方法:
1. 在 XML 中使用 `foreach` 标签
```xml
<select id="selectByIdList" resultType="com.example.entity.User">
SELECT * FROM user WHERE id IN
<foreach collection="idList" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
```
2. 在注解中使用 `@foreach` 注解
```java
@Select("SELECT * FROM user WHERE id IN " +
"<foreach collection='idList' item='id' open='(' separator=',' close=')'>" +
"#{id}" +
"</foreach>")
List<User> selectByIdList(@Param("idList") List<Long> idList);
```
以上两种方式的效果相同,都是根据传入的 `idList` 生成 `IN` 语句。
`foreach` 标签的属性说明:
- `collection`:需要遍历的集合或数组。
- `item`:遍历集合或数组时,当前元素的别名。
- `open`:遍历集合或数组时,生成 SQL 语句的开头。
- `separator`:遍历集合或数组时,生成 SQL 语句的分隔符。
- `close`:遍历集合或数组时,生成 SQL 语句的结尾。
- `index`:遍历集合或数组时,当前元素的下标。
- `javaType`:遍历集合或数组时,当前元素的类型。
- `jdbcType`:遍历集合或数组时,当前元素在 SQL 中的类型。
- `property`:遍历集合或数组时,当前元素的属性名。适用于对象集合或数组。
注意事项:
- `collection` 属性可以使用 OGNL 表达式,例如 `collection="#{userList}"`。
- 如果遍历的是对象集合或数组,可以使用 `property` 指定当前元素的属性名。
- 如果集合或数组中的元素是简单类型(如 int、String),可以省略 `javaType` 和 `jdbcType` 属性。如果是复杂类型(如 Date、BigDecimal),需要指定 `javaType` 和 `jdbcType`。
- `foreach` 中可以嵌套 `if`、`where`、`set` 等标签,以实现更复杂的 SQL 生成。
阅读全文