foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。item表示集合中每一个元素进行迭代时的别名,index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,open表示该语句以什么开始,separator表示在每次进行迭代之间以什么符号作为分隔 符,close表示以什么结束,在使用foreach的时候最关键的也是最容易出错的就是collection属性,该属性是必须指定的,但是在不同情况 下,该属性的值是不一样的,主要有一下3种情况:

1.     如果传入的是单参数且参数类型是一个List的时候,collection属性值为list

2.     如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array

3.     如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在breast里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key

下面分别来看看上述三种情况的示例代码:

1.单参数List的类型:
   
<select id="dynamicForeachTest"
resultType="Blog">
   
    select *
from t_blog where id in
   
   
<foreach collection="list" index="index" item="item"
open="(" separator="," close=")">
   
   
   
#{item}
   
   
</foreach>
   
</select>
上述collection的值为list,对应的Mapper是这样的
public List<Blog>
dynamicForeachTest(List<Integer>
ids);
测试代码:
    @Test
    public void
dynamicForeachTest() {
   
    SqlSession
session = Util.getSqlSessionFactory().openSession();
   
    BlogMapper
blogMapper = session.getMapper(BlogMapper.class);
   
   
List<Integer> ids = new
ArrayList<Integer>();
   
   
ids.add(1);
   
   
ids.add(3);
   
   
ids.add(6);
   
   
List<Blog> blogs =
blogMapper.dynamicForeachTest(ids);
   
    for (Blog
blog : blogs)
   
   
   
System.out.println(blog);
   
   
session.close();
    }
2.单参数array数组的类型:
   
<select id="dynamicForeach2Test"
resultType="Blog">
   
    select *
from t_blog where id in
   
   
<foreach collection="array" index="index"
item="item" open="(" separator="," close=")">
   
   
   
#{item}
   
   
</foreach>
   
</select>
上述collection为array,对应的Mapper代码:
public List<Blog>
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<Blog> blogs =
blogMapper.dynamicForeach2Test(ids);
   
    for (Blog
blog : blogs)
   
   
   
System.out.println(blog);
   
   
session.close();
    }
3.自己把参数封装成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}
   
   
</foreach>
   
</select>
上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:
public List<Blog>
dynamicForeach3Test(Map<String,
Object> params);
对应测试代码:
    @Test
    public void
dynamicForeach3Test() {
   
    SqlSession
session = Util.getSqlSessionFactory().openSession();
   
    BlogMapper
blogMapper = session.getMapper(BlogMapper.class);
   
    final
List<Integer> ids = new
ArrayList<Integer>();
   
   
ids.add(1);
   
   
ids.add(2);
   
   
ids.add(3);
   
   
ids.add(6);
   
   
ids.add(7);
   
   
ids.add(9);
   
   
Map<String, Object> params = new
HashMap<String, Object>();
   
   
params.put("ids", ids);
   
   
params.put("title", "中国");
   
   
List<Blog> blogs =
blogMapper.dynamicForeach3Test(params);
   
    for (Blog
blog : blogs)
   
   
   
System.out.println(blog);
   
   
session.close();
    }

MyBatis的foreach语句详解的更多相关文章

  1. MyBatis的foreach语句详解 list array map

    foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 item,index,collection,open,separator,close.it ...

  2. MyBatis的Mapper文件的foreach标签详解

    MyBatis的Mapper文件的foreach标签用来迭代用户传递过来的Lise或者Array,让后根据迭代来拼凑或者批量处理数据.如:使用foreach来拼接in子语句. 在学习MyBatis M ...

  3. Mybatis批量insert 返回主键值和foreach标签详解

    Mybatis批量insert 返回主键 Mybatis从3.3.1版本开始,支持批量插入后返回主键ID.首先对于支持自增主键的数据库使用useGenerateKeys和keyProperty,对于不 ...

  4. MyBatis的动态SQL详解

    MyBatis的动态SQL是基于OGNL表达式的,它可以帮助我们方便的在SQL语句中实现某些逻辑,本文详解mybatis的动态sql,需要的朋友可以参考下 MyBatis 的一个强大的特性之一通常是它 ...

  5. Mybatis SQL映射文件详解

    Mybatis SQL映射文件详解 mybatis除了有全局配置文件,还有映射文件,在映射文件中可以编写以下的顶级元素标签: cache – 该命名空间的缓存配置. cache-ref – 引用其它命 ...

  6. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...

  7. 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+SpringMVC项目详解

    http://blog.csdn.net/noaman_wgs/article/details/53893948 利用Intellij+MAVEN搭建Spring+Mybatis+MySql+Spri ...

  8. mysql基础篇 - SELECT 语句详解

    基础篇 - SELECT 语句详解         SELECT语句详解 一.实验简介 SQL 中最常用的 SELECT 语句,用来在表中选取数据,本节实验中将通过一系列的动手操作详细学习 SELEC ...

  9. T-SQL_select语句详解

    select语句执行的过程: 先看查询内容 ==>where条件 ==>[分组条件] ==>[分组搜索条件] ==>内容输出 ==>[是否排序] SQL中SELECT语句 ...

随机推荐

  1. 【bzoj1211】 HNOI2004—树的计数

    http://www.lydsy.com/JudgeOnline/problem.php?id=1211 (题目链接) 题意 一个有n个结点的树,设它的结点分别为v1, v2, …, vn,已知第i个 ...

  2. 【bzoj1179】 Apio2009—Atm

    www.lydsy.com/JudgeOnline/problem.php?id=1179 (题目链接) 题意 给出一张有向图,每个节点有点权.标记一些点,找出一条路径,可以重复经过一条边,使得总点权 ...

  3. java连接mysql(二)

    模拟转账成功时的业务场景 import java.sql.*; public class TransactionDemo1 { public static void main(String[] arg ...

  4. HDU #3333

    Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Descript ...

  5. 修改myeclipse 新建JSP文件时的默认模板

    MyEclipse中构造新的jsp模板(原创) 首先随便打开一个jsp页,在网页中单击右键选择:preferences 打开后如图所示,找到jsp template选项. 选择new,在弹出的提示框, ...

  6. Why The Golden Age Of Machine Learning is Just Beginning

    Why The Golden Age Of Machine Learning is Just Beginning Even though the buzz around neural networks ...

  7. Advice for applying Machine Learning

    https://jmetzen.github.io/2015-01-29/ml_advice.html Advice for applying Machine Learning This post i ...

  8. Mac 鼠须管 合并词库 简单使用

    之前一直没用过合成词库这功能,有个同步用户数据的选项,点它后,生成一个文件夹,里面就有当前的一些配置,词库之类的 /Users/dfpo/Library/Rime/sync 这样我们就得到了一个装着用 ...

  9. Centos 5.x/6.x 配置163网易yum源

    Centos系统默认都是系统自带的yum源,国内用户用yum源安装比较慢,为了提高效率,一般我们会配置国内的yum源.国内比较好的yum源有网易yum源.搜狐yum源等. 我感觉网易的yum源比较好用 ...

  10. [名词解释]Constant Amortized Time

    http://stackoverflow.com/questions/200384/constant-amortized-time 分摊常量时间: Amortised time explained i ...