在mybatis中,
在MyBatis中,
一个典型的写法如下:
<foreach collection="ids" item="id" separator="," open="(" close=")"> #{id} </foreach>
这段代码会生成类似 (1,2,3) 的结果,常用于 IN 查询。
当你需要根据一组ID查询数据时,最常见的方式就是结合
<select id="selectByIds" resultType="User"> SELECT * FROM users WHERE id IN <foreach collection="ids" item="id" separator="," open="(" close=")"> #{id} </foreach> </select>
传入的参数是一个 List 或 Array,例如:[1, 2, 3],最终 SQL 会变成:
SELECT * FROM users WHERE id IN (1,2,3);
在执行批量插入时,也可以用
<insert id="batchInsert"> INSERT INTO users (name, email) VALUES <foreach collection="userList" item="user" separator=","> (#{user.name}, #{user.email}) </foreach> </insert>
注意:这种写法依赖数据库支持多值插入(MySQL、PostgreSQL 支持),Oracle 不支持这种方式,需要用其他方式处理。
有时你可能想根据一个集合动态拼接多个 OR 条件:
<where> <foreach collection="keywords" item="keyword" separator=" OR "> name LIKE CONCAT('%', #{keyword}, '%') </foreach> </where>
这样就能实现多个关键词模糊匹配的效果。
传入参数的类型不同,collection 属性的写法也会有所不同:
参数类型 | 示例写法 |
---|---|
List | collection="list" 或具体名称如 ids |
数组 | collection="array" 或自定义名如 nums |
Map | collection="map" 或 key 名如 userIds |
如果你用了注解方式传参,比如:
List<User> selectByIds(@Param("ids") List<Integer> ids);
那 XML 中就可以直接写 collection="ids"。
基本上就这些,掌握好
以上就是MyBatis动态SQL中foreach标签的详细使用手册的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号