酷代码 AI
菜单

mybatis in 循环写法

在 MyBatis 中,`in` 循环通常用于处理动态 SQL 中 `WHERE` 子句里的 `IN` 条件。以下是几种不同场景下的示例。 场景 1:传入参数为 List 当传入的参数是一个 `List` 时,可使用 `<foreach>` 标签来实现 `in` 循环。 Mapper 接口 ```java import java.util.List; public interface UserMapper { // 根据用户 ID 列表查询用户信息 List<User> selectUsersByIds(List<Integer> ids); } ``` Mapper XML 文件 ```xml <mapper namespace="com.example.mapper.UserMapper"> <!-- 查询用户信息 --> <select id="selectUsersByIds" resultType="com.example.entity.User"> SELECT * FROM user WHERE id IN <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> #{item} </foreach> </select> </mapper> ``` 代码解释: - `<foreach>` 标签用于遍历集合。 - `item`:表示集合中每个元素的别名。 - `index`:表示当前元素在集合中的索引。 - `collection`:指定要遍历的集合。若传入的是单个 `List`,则使用 `list`;若传入的是 `Map`,则使用 `Map` 中的键。 - `open`:表示开始的字符。 - `separator`:表示分隔符。 - `close`:表示结束的字符。 场景 2:传入参数为数组 若传入的参数是数组,同样可使用 `<foreach>` 标签。 Mapper 接口 ```java import java.util.List; public interface UserMapper { // 根据用户 ID 数组查询用户信息 List<User> selectUsersByIdArray(Integer[] ids); } ``` Mapper XML 文件 ```xml <mapper namespace="com.example.mapper.UserMapper"> <!-- 查询用户信息 --> <select id="selectUsersByIdArray" resultType="com.example.entity.User"> SELECT * FROM user WHERE id IN <foreach item="item" index="index" collection="array" open="(" separator="," close=")"> #{item} </foreach> </select> </mapper> ``` 代码解释:当传入的是数组时,`collection` 属性的值为 `array`。 场景 3:传入参数为 Map,Map 中包含集合 若传入的参数是 `Map`,且 `Map` 中包含集合,可通过集合在 `Map` 中的键来指定 `collection`。 Mapper 接口 ```java import java.util.List; import java.util.Map; public interface UserMapper { // 根据用户 ID 列表查询用户信息 List<User> selectUsersByMap(Map<String, Object> paramMap); } ``` Mapper XML 文件 ```xml <mapper namespace="com.example.mapper.UserMapper"> <!-- 查询用户信息 --> <select id="selectUsersByMap" resultType="com.example.entity.User"> SELECT * FROM user WHERE id IN <foreach item="item" index="index" collection="ids" open="(" separator="," close=")"> #{item} </foreach> </select> </mapper> ``` 代码调用示例 ```java import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; public class Main { public static void main(String[] args) { // 创建 MyBatis 的 SqlSessionFactory 等代码省略 UserMapper userMapper = sqlSession.getMapper(UserMapper.class); Map<String, Object> paramMap = new HashMap<>(); paramMap.put("ids", Arrays.asList(1, 2, 3)); List<User> users = userMapper.selectUsersByMap(paramMap); } } ``` 代码解释:这里 `collection` 属性的值 `ids` 是 `Map` 中集合的键。 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: 1. 注意 `collection` 属性的值,要根据传入的参数类型正确设置。传入单个 `List` 用 `list`,传入数组用 `array`,传入 `Map` 则用 `Map` 中的键。 2. 确保集合中的元素类型与 SQL 语句中期望的类型一致,否则可能会出现类型转换错误。 3. 当集合为空时,可能会导致 SQL 语法错误,可在代码中添加对集合是否为空的判断。 [2026-01-30 17:04:44 | AI写代码神器 | 1077点数解答]

服务商
相关提问
发财导航,免费问AI
实用工具查看更多