千家信息网

mybatis foreach 属性及其三种使用情况是怎样的

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要为大家分析了mybatis foreach 属性及其三种使用情况是怎样的的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编
千家信息网最后更新 2026年11月04日mybatis foreach 属性及其三种使用情况是怎样的

这篇文章主要为大家分析了mybatis foreach 属性及其三种使用情况是怎样的的相关知识点,内容详细易懂,操作细节合理,具有一定参考价值。如果感兴趣的话,不妨跟着跟随小编一起来看看,下面跟着小编一起深入学习"mybatis foreach 属性及其三种使用情况是怎样的"的知识吧。

foreach 属性介绍

foreach 用于迭代传入过来的参数。

它的属性介绍分别是

  • collection:表示传入过来的参数的数据类型。该参数为必选。要做 foreach 的对象,作为入参时,List 对象默认用 list 代替作为键,数组对象有 array 代替作为键,Map 对象没有默认的键。当然在作为入参时可以使用 @Param("keyName") 来设置键,设置 keyName 后,list,array 将会失效。 除了入参这种情况外,还有一种作为参数对象的某个字段的时候。举个例子:如果 User 有属性 List ids。入参是 User 对象,那么这个 collection = "ids" 如果 User 有属性 Ids ids;其中 Ids 是个对象,Ids 有个属性 List id;入参是 User 对象,那么 collection = "ids.id"

如果传入的是单参数且参数类型是一个 List 的时候,collection 属性值为 list

如果传入的是单参数且参数类型是一个 array 数组的时候,collection 的属性值为 array

如果传入的参数是多个的时候,我们就需要把它们封装成一个 Map 了,当然单参数也可以封装成 map。

  • item:循环体中的具体对象。支持属性的点路径访问,如 item.age,item.info.details。具体说明:在 list 和数组中是其中的对象,在 map 中是 value,该参数为必选。(它是每一个元素进行迭代时的别名)

  • index:在 list 和数组中,index 是元素的序号;在 map 中,index 是元素的 key。

  • open:表示该语句以什么开始

  • close:表示该语句以什么结束

  • separator:表示在每次进行迭代之间以什么符号作为分隔符

介绍完属性之后,下面就进入实践。首先先来看一个简单到爆炸的表(表名:t_test_foreach)

单参数是 array 类型

测试类

// ids = {1,2,3}public List testFindByArray(int[] ids) throws Exception {    SqlSession sqlSession = getSession().openSession();    userList = sqlSession.selectList(NameSpace + ".findByArray", ids);    System.out.println(userList.toString());    sqlSession.close();    return userList;}

mapper.xml

    -->

输出结果

DEBUG - ==> Preparing: SELECT id,`name` FROM t_test_foreach WHERE id IN ( ? , ? , ? )
DEBUG - ==> Parameters: 1(Integer), 2(Integer), 3(Integer)
DEBUG - <== Total: 3
[User{name='n1', id='1'}, User{name='n2', id='2'}, User{name='n3', id='3'}]

单参数是 List 类型

测试类

// List 元素有 1,3,5public List testFindByList(List ids) throws Exception {    SqlSession sqlSession = getSession().openSession();    userList = sqlSession.selectList(NameSpace + ".findByList", ids);    System.out.println(userList.toString());    sqlSession.close();    return userList;}

mapper.xml

输出结果

DEBUG - ==> Preparing: SELECT id,`name` FROM t_test_foreach WHERE id IN ( ? , ? , ? )
DEBUG - ==> Parameters: 1(Integer), 3(Integer), 5(Integer)
DEBUG - <== Total: 3
[User{name='n1', id='1'}, User{name='n3', id='3'}, User{name='n5', id='5'}]

单参数是 Map 类型

测试类

// Map 中的元素有 int[] ids = {2, 4};map.put("ids", ids);public List testFindByMap(Map map) throws Exception {    SqlSession sqlSession = getSession().openSession();    System.out.println(map.toString());    List objects = sqlSession.selectList(NameSpace + ".findByMap", map);    System.out.println(objects.toString());    sqlSession.close();    return userList;}

mapper.xml

输出结果

DEBUG - ==> Preparing: SELECT id,`name` FROM t_test_foreach WHERE id IN ( ? , ? )
DEBUG - ==> Parameters: 2(Integer), 4(Integer)
DEBUG - <== Total: 2
[User{name='n2', id='2'}, User{name='n4', id='4'}]

多参数

这种情况在传参数时,一定要改用 Map 方式

测试类

public void testUpdateByParams(int[] ids,String name) throws Exception {    SqlSession sqlSession = getSession().openSession();    Map map = new HashMap();    map.put("ids",ids); // ids = {1,2,4}    map.put("name",name);// name = "updated"    sqlSession.selectList(NameSpace + ".findByParams", map);    sqlSession.close();}

mapper.xml

输出结果

DEBUG - ==> Preparing: UPDATE t_test_foreach SET `name` = ? WHERE id IN ( ? , ? , ? )
DEBUG - ==> Parameters: updated(String), 1(Integer), 2(Integer), 4(Integer)

关于"mybatis foreach 属性及其三种使用情况是怎样的"就介绍到这了,更多相关内容可以搜索以前的文章,希望能够帮助大家答疑解惑,请多多支持网站!

参数 属性 对象 类型 情况 元素 时候 数组 结果 测试 输出 迭代 内容 别名 知识 语句 跟着 封装 支持 之间 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州淘业互联网络科技 哈尔滨大商圈互联网科技有限公司 广州百单互联网科技有限公司 互联网科技保险 北京互联网科技公司 天津摩尔互联网科技 睿民互联网科技 米客互联网科技 上海亿帐通互联网科技 互联网科技博主是什么意思 北京华百购互联网科技有限公司 广州市恰铎互联网科技有限公司 互联网在线教育科技创业 工业互联网等科技实现智能化赋能 上海京穆互联网科技有限公司 伍佰万互联网科技怎么赚钱 广州三三互联网科技有限公司 网互联网络科技 六子台科技互联网展会 利用互联网等科技手段 互联网科技活动banner 上海亿帐通互联网科技 镁科技互联网资讯平台 衡水科技产业互联网平台 蓝色互联网科技 现代科技和互联网有关系吗 互联网公司黑科技创始人 雨阳互联网卡科技有限公司 银行科技岗属于互联网吗 上海万顺科技互联网有限公司招聘
0