博客
关于我
mybatis中foreach的用法(转)
阅读量:800 次
发布时间: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/

你可能感兴趣的文章
mysql中having的用法
查看>>
MySQL中interactive_timeout和wait_timeout的区别
查看>>
mysql中int、bigint、smallint 和 tinyint的区别、char和varchar的区别详细介绍
查看>>
mysql中json_extract的使用方法
查看>>
mysql中json_extract的使用方法
查看>>
mysql中kill掉所有锁表的进程
查看>>
mysql中like % %模糊查询
查看>>
MySql中mvcc学习记录
查看>>
mysql中null和空字符串的区别与问题!
查看>>
MySQL中ON DUPLICATE KEY UPDATE的介绍与使用、批量更新、存在即更新不存在则插入
查看>>
MYSQL中TINYINT的取值范围
查看>>
MySQL中UPDATE语句的神奇技巧,让你操作数据库如虎添翼!
查看>>
Mysql中varchar类型数字排序不对踩坑记录
查看>>
MySQL中一条SQL语句到底是如何执行的呢?
查看>>
MySQL中你必须知道的10件事,1.5万字!
查看>>
MySQL中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>