博客
关于我
mybatis中foreach的用法(转)
阅读量:799 次
发布时间:2023-04-17

本文共 4076 字,大约阅读时间需要 13 分钟。

MyBatis foreach语法详解

MyBatis 的 foreach 语法 提供了灵活的方式来处理多个元素的循环,支持 ListArrayMap 三种类型。以下是 foreach 的各个属性及其详细说明。


foreach 的属性

属性 描述
item 循环体中的具体对象,支持属性点路径访问。
例如:item.ageitem.info.details
ListArray 中是元素,在 Map 中是 value。该参数为必选。
collection 要循环的对象,作为入参时,默认使用 ListArrayMap 的类型名称作为键。
可以通过 @Param("keyName") 自定义键名。该参数为必选。
separator 元素之间的分隔符,常用于 in() 方法时,避免手动输入逗号。该参数可选。
open 循环代码的开始符号,常用于 in()values() 方法。该参数可选。
close 循环代码的结束符号,常用于 in()values() 方法。该参数可选。
index ListArray 中表示元素的序号,在 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 条件。


MapListArray 的区别

  • Map:存储键值对,循环时使用键的值。在 Map 中,index 属性表示键的值。
  • ListArray:存储多个元素,循环时使用元素的值。index 属性表示元素的序号。

foreach 的灵活性

  • Map 中,可以使用动态的键名,例如 collection="map.key"
  • ListArray 中,可以使用 index 属性获取元素的序号。

注意事项

  • in() 方法中,separator 属性可以设置分隔符,避免手动输入逗号。
  • openclose 属性用于生成循环语句的括号,常用于 in()values() 方法。

通过以上示例,可以看到 foreachListArrayMap 中的灵活应用,适用于不同场景的动态查询需求。

转载地址:http://fmgfk.baihongyu.com/

你可能感兴趣的文章