MyBatis的Mapper文件的foreach标签详解
MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据。如:使用foreach来拼接in子语句。
在学习MyBatis Mapper文件的foreach标签时我们先看看DTD是如何定义的?DTD代码如下:
<!-- 定义foreach元素 -->
<!ELEMENT foreach (#PCDATA | include | trim | where | set | foreach | choose | if | bind)*>
<!-- 定义foreach元素的属性 -->
<!ATTLIST foreach
collection CDATA #REQUIRED
item CDATA #IMPLIED
index CDATA #IMPLIED
open CDATA #IMPLIED
close CDATA #IMPLIED
separator CDATA #IMPLIED>
foreach属性详解
collection
该属性指定你要遍历的集合名称,然后在调用该方法的时候,通过参数的方式传递过来。
定义了一个用来获取用户信息的方法,然后使用foreach元素来构建in子语句。这里使用了默认的array,因此可以传递一个数组给这个方法,如下:
userMapper.getUserInfo(new String[]{"val01", "val02", "val03", "val04"});
注意:
(1)List默认的名称为“list”。
(2)数组(Array)的默认名称为“array”。如:
<select id="getUserInfo" resultType="hashmap">
SELECT N_USERID, C_NAME, C_SEX, N_AGE
FROM T_USER
WHERE N_USERID IN
<foreach item="myItem" index="index" collection="array"
open="(" separator="," close=")" >
#{myItem}
</foreach>
</select>
(3)如果指定的名称不是“list”和“array”,则你需要通过Map<String,List>或Map<String,new Object[]>的方式来指定该名称。
Map<String,List<String>> params = new HashMap<String,List<String>>();
params.put("params", Arrays.asList(new String[]{"val01", "val02", "val03", "val04"}) );
userMapper.getUserInfo(params );
上面定义了一个getUserInfo方法用来获取用户信息,然后使用foreach元素来构造in子语句,这里我们使用自定义的myList作为集合参数。
<select id="getUserInfo" parameterType="hashmap" resultType="hashmap">
SELECT N_USERID, C_NAME, C_SEX, N_AGE
FROM T_USER
WHERE N_USERID IN
<foreach item="myItem" index="index" collection="myList"
open="(" separator="," close=")" >
#{myItem}
</foreach>
</select>
item
用来临时存放迭代集合中当前元素的值,便于在foreach中使用。如:
<select id="getUserInfo" parameterType="hashmap" resultType="hashmap">
SELECT N_USERID, C_NAME, C_SEX, N_AGE
FROM T_USER
WHERE N_USERID IN
<foreach item="myItem" index="index" collection="myList"
open="(" separator="," close=")" >
#{myItem}
</foreach>
</select>
在上面的语句中item="myItem",这个值在#{myItem}被使用。
index
这个属性用来指定用来访问迭代集合下标的名称。如:index="myIndex",则#{myIndex}用来访问当前迭代的下标。下标从0开始。
open
将该属性指定的值添加到foreach迭代后拼出字符串的开始。如:拼凑in子语句的开始部分“(”。
close
将该属性指定的值添加到foreach迭代拼出字符串的结尾。如:拼凑in子语句的介绍部分")"。
separator
用来分割foreach元素迭代的每个元素。如:val1,val2,val3
<select id="getUserInfo" parameterType="hashmap" resultType="hashmap">
SELECT N_USERID, C_NAME, C_SEX, N_AGE
FROM T_USER
WHERE N_USERID IN
<foreach item="myItem" index="index" collection="myList"
open="(" separator="," close=")" >
#{myItem}
</foreach>
</select>
如果传递给上面方法的数组是
String[] array = new String[]{"val1", "val2", "val3"};
userMapper.getUserInfo(array);
// 拼凑出的字符串:(val1,val2,val3)
MyBatis的Mapper文件的foreach标签详解的更多相关文章
- Mybatis批量insert 返回主键值和foreach标签详解
Mybatis批量insert 返回主键 Mybatis从3.3.1版本开始,支持批量插入后返回主键ID.首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不 ...
- JSTL-c:forEach标签详解
c:forEach基本格式: <c:forEach var="每个变量名字" items="要迭代的list" varStatus="每个对象的 ...
- ROS中.launch文件的remap标签详解
https://www.cnblogs.com/LiuQiang921202/p/7679943.html
- 逆向工程生成的mybatis中mapper文件。mapper接口,实例化成对象
逆向工程生成的mybatis中mapper文件中,*mapper文件只是接口,而不是类文件.但是却可以通过spring的容器获得实例. 例如: //1.获得mapper代理对象,从spring容器获得 ...
- 自动生成Mybatis的Mapper文件
自动生成Mybatis的Mapper文件 工作中使用mybatis时我们需要根据数据表字段创建pojo类.mapper文件以及dao类,并且需要配置它们之间的依赖关系,这样的工作很琐碎和重复,myba ...
- Meta标签详解(HTML JAVASCRIPT)
Meta标签详解,在网上转的,希望对大家有用 您的个人网站即使做得再精彩,在“浩瀚如海”的网络空间中,也如一叶扁舟不易为人发现,如何推广 个人网站,人们首先想到的方法无外乎以下几种: ● 在搜索引擎中 ...
- 网页设计:Meta标签详解
很多人忽视了HTML标签META的强大功效,一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性,有兴趣吗,谁我来重新认识一下META标签吧! META标签是HTML语言HEAD区的一个辅 ...
- meta标签详解(meta标签的作用)///////////////////////////转
meta标签详解(meta标签的作用) 很多人却忽视了HTML标签META的强大功效,一个好的META标签设计可以大大提高你的个人网站被搜索到的可能性,有兴趣吗,谁我来重新认识一下META标签吧 ...
- 引用 struts2标签详解 - wo的的日志 - 网易博客
引用 元元 的 struts2标签详解 引用 COLD 的 struts2标签详解 要在jsp中使用Struts2的标志,先要指明标志的引入.通过jsp的代码的顶部加入以下的代码: <%@t ...
随机推荐
- MyEclipse使用心得:SVN插件安装方法
1.在线安装,打开myeclipse,help--->MyEclipse Configuration Center 2.点击Add Site 打开对话框,在对话框Name输入Svn,URL中输入 ...
- 自定义AlertDialog控件的使用(AndroidStudio)
AlertDialog 第一种:可随意自定义控件 第一步:自定义弹出的页面 ,新建一个XML页面 如下图 不需要Activity 第二步:在主页面设置一个按钮弹出上图页面 (下面是主要代码 调用 ...
- 使用AIDL调用远程服务设置系统时间
在实际工作中,经常遇到客户需要用代码设置系统时间的需求,但是Android非系统应用是无法设置系统时间的.于是,我设计了一个使用系统签名的时间设置服务,客户通过bind调用服务里的方法就能达到设置时间 ...
- 优质Android小部件:索尼滚动相册
虽然骚尼手机卖的不怎么样,但是有些东西还是做的挺好的,工业设计就不用说了,索尼的相册的双指任意缩放功能也是尤其炫酷.其桌面小部件滚动相册我觉得也挺好的,比谷歌原生的相册墙功能好多了,网上搜了一下也没发 ...
- iOS之UIApplication详解
UIApplication对象特点: 特点1: UIApplication对象是应用程序的象征,一个UIApplication对象就代表一个应用程序,而且是单例的.(用来封装整个应用程序的一个对象, ...
- OC 观察者模式(通知中心,KVO)
OC 观察者模式(通知中心,KVO) 什么是观察者模式??? A对B的变化感兴趣,就注册为B的观察者,当B发生变化时通知A,告知B发生了变化.这就是观察者模式. 观察者模式定义了一种一对多的依赖关系, ...
- IOS开发之Bug--使用xib的自动布局和代码中修改遇到的bug
首先,在xib中约束了宽高22,但是需要代码动态重设,所以一开始如下设置,但是实际显示的仍然是22,而不是重设的值: 然后直接拿xib的将布局约束对象拖线重新通过代码重设约束值,虽然打印的结果宽高值是 ...
- 敏捷遇上UML—软创基地马年大会(广州站 2014-4-19)
我们将在广州为您奉献高端知识大餐,当敏捷遇上UML,会发生怎样的化学作用呢?首席专家张老师将会为您分享需求分析及软件设计方面的最佳实践,帮助您掌握敏捷.UML及两者相结合的实战技巧. 时间:2 ...
- Git 工作流程
Git 作为一个源码管理系统,不可避免涉及到多人协作. 协作必须有一个规范的工作流程,让大家有效地合作,使得项目井井有条地发展下去.”工作流程”在英语里,叫做”workflow”或者”flow”,原意 ...
- Why Do We Need a Data Warehouse?
https://dwbi1.wordpress.com/2012/12/03/why-do-we-need-a-data-warehouse/ 经常有人来质疑数据仓库的价值,为什么我们需要花费一年多的 ...