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的类型:

1

2 select * from t_blog where id in

3

4 #{item}

5

6

上述collection的值为list,对应的Mapper是这样的

public List dynamicForeachTest(List ids);

测试代码:

1 @Test

2 public void dynamicForeachTest() {

3 SqlSession session = Util.getSqlSessionFactory().openSession();

4 BlogMapper blogMapper = session.getMapper(BlogMapper.class);

5 List ids = new ArrayList();

6 ids.add(1);

7 ids.add(3);

8 ids.add(6);

9 List blogs = blogMapper.dynamicForeachTest(ids);

10 for (Blog blog : blogs)

11 System.out.println(blog);

12 session.close();

13 }

2.单参数array数组的类型:

1

2 select * from t_blog where id in

3

4 #{item}

5

6

上述collection为array,对应的Mapper代码:

public List dynamicForeach2Test(int[] ids);

对应的测试代码:

1 @Test

2 public void dynamicForeach2Test() {

3 SqlSession session = Util.getSqlSessionFactory().openSession();

4 BlogMapper blogMapper = session.getMapper(BlogMapper.class);

5 int[] ids = new int[] {1,3,6,9};

6 List blogs = blogMapper.dynamicForeach2Test(ids);

7 for (Blog blog : blogs)

8 System.out.println(blog);

9 session.close();

10 }

3.自己把参数封装成Map的类型

1

2 select * from t_blog where title like "%"#{title}"%" and id in

3

4 #{item}

5

6

上述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();

}

mysql里collection_foreach中collection的三种用法相关推荐

  1. Java中final的三种用法

    在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...

  2. vue中$refs的三种用法

    我们都知道,在vue2中获取DOM元素,可以直接在元素上绑定ref属性,然后获取到DOM元素的属性值,这种方法在vue3 中仍然可以使用,但也会有一些问题.下面就介绍$refs的三种用法: 1.vue ...

  3. C++中virtual的三种用法

    virtual用法一 #include using namespace std; class A{ public:virtual void display(){ cout<<"A ...

  4. mybatis 中 foreach collection的三种用法

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

  5. Mybatis中foreach的三种用法

    foreach一共有List,array,Map三种类型的使用场景. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. item表示集合中每一个元素进行迭代时的别名, i ...

  6. mybatis 传入参数及其 foreach collection的三种用法

    参考: 既然琴瑟起 https://www.cnblogs.com/qiankun-site/p/5762380.html V青山绿水  http://www.cnblogs.com/ruiati/p ...

  7. java中super的三种用法

    java中super的用法 super只在子类中出现 super有三种用法 [1] super.xxx; xxx可以是类的属性. 例如super.name;即从子类中获取父类name属性的值 [2] ...

  8. C++中using的三种用法

    1.导入命名空间 C++命名空间namespace的理解 使用C++在写不同的功能模块时,为了防止命名冲突,建议对模块取命名空间,这样在使用时就需要指定是哪个命名空间. 使用 using 导入命名空间 ...

  9. python中else的三种用法

    python中else可以在判断语句.循环语句和异常处理中使用. 判断语句 if - else - a = 3 b = 2 if a > b:print("a大于b") el ...

最新文章

  1. c++ resizereserve
  2. 人工检查,11 个类、97942 个标签,Roboflow 开源自动驾驶数据集可以使用啦
  3. 3704对象关闭时_VB中“对象关闭时,不允许操作”解决方案 3704 錯誤 | 学步园...
  4. android设备不自带sqlite3问题(sqlite3 not found)
  5. [转载] ffmpeg超详细综合教程——摄像头直播
  6. 23种设计模式C++源码与UML实现--观察者模式
  7. 互联网1分钟 |1211
  8. class反编译_IDEA反编译功能小试牛刀
  9. sonar findbugs plugin源码研究
  10. 机器学习与分布式机器学习_这就是为什么任何人都可以学习机器学习的原因
  11. 【Spring】Spring boot的ApplicationContextAware 实现获取service
  12. Anaconda安装后找不到conda.exe
  13. 洛谷——P1482 Cantor表(升级版)
  14. Silverlight 3正式版新鲜出炉
  15. HTML固定的底栏(flex布局)
  16. 计算机网络拓扑结构的分析,计算机网络拓扑结构分析
  17. 国美易卡被曝涉嫌〃高利贷〃,威胁用户把隐私卖给诈骗集团
  18. (附源码)php二手服装网站 毕业设计201711
  19. CobaltStrike魔改与增强
  20. Java Class 是什么

热门文章

  1. .net core获取本机IP地址
  2. RocksDB Java API 操作示例
  3. dedecms标签大全(非常经典)
  4. UE4基础,Actor设置与摄像机SpringArm添加
  5. 自制Console线(已测试CISCO3560可用)
  6. ERP项目管理的内容
  7. 解决Angular2 (SystemJS) XHR error (404 Not Found) loading traceur
  8. 华中科技大学计算机就业质量报告,2018年毕业生就业质量报告,复旦大学和华中科大的数据对比...
  9. 浅谈企业级应用软件开发
  10. 测试进阶篇之测试用例设计-淘宝购物车