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