mybatis中foreach的用法(转)
示例一:
示例二:
示例三:
示例四:
select PASSWORD as password from T_S_P_USER WHERE USER_ID = #{item} ]]>USER_ID=#userId#PASSWORD=#password#CLASS_ID = #classIds[]#
发布日期:2025-06-20 20:11:18
浏览次数:24
分类:精选文章
本文共 4076 字,大约阅读时间需要 13 分钟。
MyBatis foreach语法详解
MyBatis 的 foreach 语法 提供了灵活的方式来处理多个元素的循环,支持 List、Array 和 Map 三种类型。以下是 foreach 的各个属性及其详细说明。
foreach 的属性
| 属性 | 描述 |
|---|---|
| item | 循环体中的具体对象,支持属性点路径访问。例如:item.age、item.info.details。在 List 和 Array 中是元素,在 Map 中是 value。该参数为必选。 |
| collection | 要循环的对象,作为入参时,默认使用 List、Array 和 Map 的类型名称作为键。可以通过 @Param("keyName") 自定义键名。该参数为必选。 |
| separator | 元素之间的分隔符,常用于 in() 方法时,避免手动输入逗号。该参数可选。 |
| open | 循环代码的开始符号,常用于 in() 和 values() 方法。该参数可选。 |
| close | 循环代码的结束符号,常用于 in() 和 values() 方法。该参数可选。 |
| index | 在 List 和 Array 中表示元素的序号,在 Map 中表示键的值。该参数可选。 |
示例一:List 的使用
注:实际 SQL 会生成 WHERE id IN (?, ?),参数会替换为具体的 ID 值。
示例二:Map 的使用
注:#{operationTypeId} 和 #{storageId} 会被替换为具体的值,生成动态的 WHERE 条件。
示例三:Array 的使用
public void testQuery() { ColInfoDao dao = (ColInfoDao) ctx.getBean("colInfoDao"); Map map = new HashMap(); map.put("userId", "tom"); map.put("password", "123"); String[] a = { "20000001", "20000002" }; map.put("classIds", Arrays.asList(a)); Object password = dao.query(map); System.out.println("password:" + password); Assert.assertEquals("123", password);} 示例四:Map 的使用
注:#userId# 和 #password# 会被替换为具体的值,#classIds[]# 会生成动态的 IN 条件。
Map 和 List、Array 的区别
Map:存储键值对,循环时使用键的值。在Map中,index属性表示键的值。List和Array:存储多个元素,循环时使用元素的值。index属性表示元素的序号。
foreach 的灵活性
- 在
Map中,可以使用动态的键名,例如collection="map.key"。 - 在
List和Array中,可以使用index属性获取元素的序号。
注意事项
- 在
in()方法中,separator属性可以设置分隔符,避免手动输入逗号。 open和close属性用于生成循环语句的括号,常用于in()和values()方法。
通过以上示例,可以看到 foreach 在 List、Array 和 Map 中的灵活应用,适用于不同场景的动态查询需求。
发表评论
最新留言
表示我来过!
[***.240.166.169]2026年05月30日 05时54分58秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!