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 ...
随机推荐
- Sharepoint学习笔记—习题系列--70-576习题解析 --索引目录
Sharepoint学习笔记—习题系列--70-576习题解析 为便于查阅,这里整理并列出了70-576习题解析系列的所有问题,有些内容可能会在以后更新. 需要事先申明的是: 1. ...
- android VelocityTracker 速度追踪器的使用及创建
VelocityTracker 速度追踪 第一,创建方式: VelocityTracker mVelocityTracker = new VelocityTracker .obtain() 第二, ...
- iOS Swift-元组tuples(The Swift Programming Language)
iOS Swift-元组tuples(The Swift Programming Language) 什么是元组? 元组(tuples)是把多个值组合成一个复合值,元组内的值可以使任意类型,并不要求是 ...
- MongoDB-服务器管理
前言 本文主要涉及一下内容:数据库的备份和恢复,对于任一数据库来说备份至关重要:数据的导入和导出:数据库修复:数据库状态监控工具mongostat:在使用过程遇到其他命令会总结在此. 1.数据库的备份 ...
- 使用 expect 命令执行自动分发系统
一.命令 except 实例详解 1. 介绍 expect 使用场景 expect可以让我们实现自动登录远程机器,并且可以实现自动远程执行命令.当然若是使用不带密码的密钥验证同样可以实现自动登录和自动 ...
- node.js自动化测试断言包assert的方法说明
参考以下文档 http://yijiebuyi.com/blog/ca2c0edf447624bd4d527490c9fce369.html http://www.cnblogs.com/softlo ...
- windows下OpenSSL加密证书安装步骤与使用方法
OpenSSL加密证书一般用于签名认证,含私钥和公钥.在Linux系统中,OpenSSL一般是已经安装好了,可以直接使用.而在Windows系统中,是需要安装使用的. 最近在使用支付平台时,用到了Op ...
- linux 命令之grep
grep主要用来在文件中进行正则查找 通常都会将高亮颜色打开,方便阅读,为grep建立一个别名alias放到.bashrc等文件中: alias grep='grep --color=auto' 最常 ...
- struts2的拦截器(Interceptor)与过滤器(Filter)
一.拦截器与过滤器的区别: 1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别. ...
- 【2016-11-7】【坚持学习】【Day22】【C# 委托的应用】
我觉得我对委托的概念还没有完全掌握,于是,我需要继续思考,学习它的应用实现.