mybatis in 写法
时间: 2025-05-11 16:31:37 浏览: 26
### MyBatis 中使用 `IN` 关键字的 SQL 写法
在 MyBatis 中,当需要处理动态参数列表时,可以利用 `<foreach>` 标签来生成带有 `IN` 条件的 SQL 查询。以下是具体的写法:
#### XML 配置方式
如果传递的是一个集合类型的参数(如 `List` 或者数组),可以通过 `<foreach>` 标签遍历该集合,并将其拼接成 `IN` 子句。
```xml
<select id="findUsersByIds" parameterType="java.util.List" resultType="com.example.User">
SELECT * FROM users WHERE id IN
<foreach collection="list" item="id" open="(" separator="," close=")">
#{id}
</foreach>
</select>
```
上述代码中:
- `collection` 属性指定了要迭代的集合名称,在这里假设传入的参数是一个名为 `list` 的 `List` 对象[^3]。
- `item` 定义了每次循环中的单个元素变量名。
- `open` 和 `close` 分别定义了整个子句的起始和结束字符。
- `separator` 则用于分隔多个值之间的连接符号。
#### 注解方式
对于注解风格的 Mapper 接口开发模式下,也可以通过 `${}` 插入原始字符串的方式来完成同样的效果,不过这种方式存在潜在的安全隐患,因此建议仅限于受控环境下的简单场景。
```java
@Select({
"<script>",
"SELECT * FROM users",
"WHERE id IN ",
"<foreach collection='ids' item='id' open='(' separator=',' close=')'>#{id}</foreach>",
"</script>"
})
public List<User> findUsersByIds(@Param("ids") List<Integer> ids);
```
此例展示了如何结合 MyBatis 动态 SQL (`<script>`) 以及 `<foreach>` 实现更灵活的功能[^1]。
#### 使用 MyBatis-Plus 简化操作
借助 MyBatis-Plus 提供的强大封装能力,可以直接调用其内置 API 构建复杂的查询逻辑而无需手动编写繁琐的 XML 文件或复杂脚本。
```java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
public List<User> getUsersByIds(List<Long> userIds) {
return this.list(new QueryWrapper<User>()
.in(CollectionUtils.isNotEmpty(userIds), "id", userIds));
}
}
```
在此处我们运用到了 MyBatis-Plus 的链式调用特性,其中 `.in()` 方法能够方便快捷地指定字段与目标值集匹配的关系[^2]。
---
###
阅读全文
相关推荐

















