本文共 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 的使用