Mybatis 中 foreach collection 的三种用法
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。
foreach元素的属性主要有 item,index,collection,open,separator,close。
- item表示集合中每一个元素进行迭代时的别名,
- index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
- open表示该语句以什么开始,
- separator表示在每次进行迭代之间以什么符号作为分隔 符,
- close表示以什么结束。
在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:
- 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list
- 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array
- 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key 。
下面分别来看看上述三种情况的示例代码:
- 单参数List的类型:
<select id="dynamicForeachTest" resultType="Blog">
    select * from t_blog where id in
    <foreach collection="list" index="index" item="item" open="(" separator="," close=")">
        #{item}
        //当连接Oracle数据库时,应添加item对应的类型(list中对象的类型)
        //#{item,jdbcType=VARCHAR}
    </foreach>
</select>上述collection的值为list,对应的Mapper代码:
public List dynamicForeachTest(List ids);测试代码:
@Test
public void dynamicForeachTest() {
	SqlSession session = Util.getSqlSessionFactory().openSession();
	BlogMapper blogMapper = session.getMapper(BlogMapper.class);
	List ids = new ArrayList();
	ids.add(1);
	ids.add(3);
	ids.add(6);
	List blogs = blogMapper.dynamicForeachTest(ids);
	for (Blog blog : blogs)
		System.out.println(blog);
	session.close();
}- 单参数array数组的类型:
<select id="dynamicForeach2Test" resultType="Blog">
    select * from t_blog where id in
    <foreach collection="array" index="index" item="item" open="(" separator="," close=")">
        #{item}
        //当连接Oracle数据库时,应添加item对应的类型(list中对象的类型)
        //#{item,jdbcType=VARCHAR}
    </foreach>
</select>上述collection为array,对应的Mapper代码:
public List dynamicForeach2Test(int[] ids);测试代码:
@Test
public void dynamicForeach2Test() {
	SqlSession session = Util.getSqlSessionFactory().openSession();
	BlogMapper blogMapper = session.getMapper(BlogMapper.class);
	int[] ids = new int[] { 1, 3, 6, 9 };
	List blogs = blogMapper.dynamicForeach2Test(ids);
	for (Blog blog : blogs)
		System.out.println(blog);
	session.close();
}- 自己把参数封装成Map的类型
<select id="dynamicForeach3Test" resultType="Blog">
    select * from t_blog where title like "%"#{title}"%" and id in
    <foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
        #{item}
        //当连接Oracle数据库时,应添加item对应的类型(list中对象的类型)
        //#{item,jdbcType=VARCHAR}
    </foreach>
</select>上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:
public List dynamicForeach3Test(Map params);测试代码:
@Test
public void dynamicForeach3Test() {
	SqlSession session = Util.getSqlSessionFactory().openSession();
	BlogMapper blogMapper = session.getMapper(BlogMapper.class);
	final List ids = new ArrayList();
	ids.add(1);
	ids.add(2);
	ids.add(3);
	ids.add(6);
	ids.add(7);
	ids.add(9);
	Map params = new HashMap();
	params.put("ids", ids);
	params.put("title", "中国");
	List blogs = blogMapper.dynamicForeach3Test(params);
	for (Blog blog : blogs)
		System.out.println(blog);
	session.close();
}Mybatis 中 foreach collection 的三种用法的更多相关文章
- mybatis 中 foreach collection的三种用法(转)
		文章转自 https://blog.csdn.net/qq_24084925/article/details/53790287 oreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集 ... 
- mybatis 中 foreach collection的三种用法
		foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ... 
- mybatis中foreach collection的三种用法
		foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. ... 
- java中 this 关键字的三种用法
		Java中this的三种用法 调用属性 (1)this可以调用本类中的任何成员变量 调用方法(可省略) (2)this调用本类中的成员方法(在main方法里面没有办法通过this调用) 调用构造方法 ... 
- mybatis foreach中collection的三种用法
		原文:https://www.cnblogs.com/xiemingjun/p/9800999.html foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach ... 
- foreach中collection的三种用法
		转载:http://blog.sina.com.cn/s/blog_b0d90e8c0102v1q1.html 传参参考:http://www.cnblogs.com/ruiati/p/6410339 ... 
- 谈一下思考,关于mybatis中<foreach collection="list">中list得来的原因 没看到官方说明
		<foreach> 是在sql语句中进行多个id查询 时用到的,因为mybatis代替jdbc和hibernate, 使用 在xml文件中编写sql语句,这是一个标签文件.然后在 dao层 ... 
- golang中的匿名函数三种用法
		package main import ( "fmt" "strconv" ) func main() { // 匿名函数的使用:方式1 f1 := func( ... 
- .NET(c#)new关键字的三种用法
		前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是 ... 
随机推荐
- DOM中元素节点,属性节点,文本节点的理解
			节点信息 每个节点都拥有包含着关于节点某些信息的属性.这些属性是: nodeName(节点名称) nodeValue(节点值) nodeType(节点类型) nodeType nodeType 属性可 ... 
- idea debug打得断点第一次可以进入,第二次不能进入
- [Office]PPT 2013如何设置图片为半透明?
			PPT里面似乎无法直接为图片设置透明度属性.下面是一种变通的办法. 1,插入一个和图片大小一致的图形(矩形):2,右键插入的矩形,然后在属性设置里选择“图片填充”,选择以需要的图片填充到该矩形里:3, ... 
- Android Activity组件的启动过程
			0.总图 1.总图中的第一步,Laucher主线程向ActivityManagerService进程发出START_ACTIVITY_TRANSACTION 如图:第一步 ~/Android/fram ... 
- POJ 1201 & HDU1384 & ZOJ 1508 Intervals(差分约束+spfa 求最长路径)
			题目链接: POJ:http://poj.org/problem?id=1201 HDU:http://acm.hdu.edu.cn/showproblem.php? pid=1384 ZOJ:htt ... 
- HDU 2181 DFS
			Problem Description 一个规则的实心十二面体,它的 20个顶点标出世界著名的20个城市,你从一个城市出发经过每一个城市刚好一次后回到出发的城市. Input 前20行的第i行有3 ... 
- insmod: error inserting 'hello.ko': -1 Invalid module format
			在学习编写linux驱动程序的时候,一般都是从写一个helloworld的模块開始. 可是在编译完毕后,进行模块载入的时候,有时会出现例如以下错误: insmod: error inserting ' ... 
- hdu2476String painter (区间DP)
			Problem Description There are two strings A and B with equal length. Both strings are made up of low ... 
- 2015.03.13,外语,读书笔记-《Word Power Made Easy》 10 “如何讨论交谈习惯”学习笔记 SESSION 26
			1.a Spartan virtue 古斯巴达人中一位有名的Laconia国王,其言语比Vermonter(美国佛蒙特州人)还简洁.一个传说,马其顿菲利普国王(亚历山大的老爸)要进攻他们的都城,发了一 ... 
- java中的NIO
			使用传统的输入输出流,当读取输入流中的数据如果没有没有读到有效的数据时,程序将在此处阻塞该线程的执行(使用InputStream的read方法从流中读取数据时,如果数据源中没有数据,它也会阻塞该线程) ... 
