Fork me on GitHub

MyBatis:SQL语句中的foreach的详细介绍

foreach 也就是遍历迭代,在SQL中通常用在 in 这个关键词的后面
foreach元素的属性主要有 item,index,collection,open,separator,close。

分别代表:
item表示集合中每一个元素进行迭代时的别名,
index用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束

代码片段:

<select id="selectByIds" resultType="com.wuuushao.pojo.User">
    select * from user where id in
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
</select>

而最为重要的就是collection属性了,既然是迭代就表示传入的参数是多个,这时候传入的参数就有以下几种可能:

  •  list
  • array
  • map

下面针对这三种情况进行具体的介绍

传入的参数为list的时候
对应的Mapper.java文件是:

public List<User> selectByIds(List<Integer> ids);

xml文件代码片段:

<select id="selectByIds" resultType="com.jackpotHan.pojo.User">
    select * from user where id in
        <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
</select>

传入的参数为Array的时候
对应的Mapper.java文件是:

public List<User> selectByIds(int[] ids);

xml文件代码片段:

<select id="selectByIds" resultType="com.jackpotHan.pojo.User">
    select * from user where id in
        <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
</select>

3. 传入的参数为Map的时候

对应的Dao中的Mapper文件是:

public List<User> selectByIds(Map<String, Object> params);

xml文件代码片段:

<select id="selectByIds" resultType="com.jackpotHan.pojo.User">
    select * from user where id in
        <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
            #{item}
        </foreach>
</select>

map的时候需要注意的是:collection的值“ids”是存储在map中的key(比如:map.put("ids",ids));这个不是随便乱写的,尤其需要注意;

作者:JackpotHan
欢迎任何形式的转载,但请务必注明出处。
限于本人水平,如果文章和代码有表述不当之处,还请不吝赐教。

posted @   JackpotHan  阅读(4787)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下
点击右上角即可分享
微信分享提示