mysql里collection_foreach中collection的三种用法
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的三种用法相关推荐
- Java中final的三种用法
在java中final的三种用法: 1. final成员变量 2. final函数 3. final类 final成员变量 当你在类中定义变量时,在其前面加上final关键字,那便是说这个变量一旦被初 ...
- vue中$refs的三种用法
我们都知道,在vue2中获取DOM元素,可以直接在元素上绑定ref属性,然后获取到DOM元素的属性值,这种方法在vue3 中仍然可以使用,但也会有一些问题.下面就介绍$refs的三种用法: 1.vue ...
- C++中virtual的三种用法
virtual用法一 #include using namespace std; class A{ public:virtual void display(){ cout<<"A ...
- mybatis 中 foreach collection的三种用法
oreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. foreach元素的属性主要有 item,index,collection,open,separator,close. i ...
- Mybatis中foreach的三种用法
foreach一共有List,array,Map三种类型的使用场景. foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合. item表示集合中每一个元素进行迭代时的别名, i ...
- mybatis 传入参数及其 foreach collection的三种用法
参考: 既然琴瑟起 https://www.cnblogs.com/qiankun-site/p/5762380.html V青山绿水 http://www.cnblogs.com/ruiati/p ...
- java中super的三种用法
java中super的用法 super只在子类中出现 super有三种用法 [1] super.xxx; xxx可以是类的属性. 例如super.name;即从子类中获取父类name属性的值 [2] ...
- C++中using的三种用法
1.导入命名空间 C++命名空间namespace的理解 使用C++在写不同的功能模块时,为了防止命名冲突,建议对模块取命名空间,这样在使用时就需要指定是哪个命名空间. 使用 using 导入命名空间 ...
- python中else的三种用法
python中else可以在判断语句.循环语句和异常处理中使用. 判断语句 if - else - a = 3 b = 2 if a > b:print("a大于b") el ...
最新文章
- c++ resizereserve
- 人工检查,11 个类、97942 个标签,Roboflow 开源自动驾驶数据集可以使用啦
- 3704对象关闭时_VB中“对象关闭时,不允许操作”解决方案 3704 錯誤 | 学步园...
- android设备不自带sqlite3问题(sqlite3 not found)
- [转载] ffmpeg超详细综合教程——摄像头直播
- 23种设计模式C++源码与UML实现--观察者模式
- 互联网1分钟 |1211
- class反编译_IDEA反编译功能小试牛刀
- sonar findbugs plugin源码研究
- 机器学习与分布式机器学习_这就是为什么任何人都可以学习机器学习的原因
- 【Spring】Spring boot的ApplicationContextAware 实现获取service
- Anaconda安装后找不到conda.exe
- 洛谷——P1482 Cantor表(升级版)
- Silverlight 3正式版新鲜出炉
- HTML固定的底栏(flex布局)
- 计算机网络拓扑结构的分析,计算机网络拓扑结构分析
- 国美易卡被曝涉嫌〃高利贷〃,威胁用户把隐私卖给诈骗集团
- (附源码)php二手服装网站 毕业设计201711
- CobaltStrike魔改与增强
- Java Class 是什么
热门文章
- .net core获取本机IP地址
- RocksDB Java API 操作示例
- dedecms标签大全(非常经典)
- UE4基础,Actor设置与摄像机SpringArm添加
- 自制Console线(已测试CISCO3560可用)
- ERP项目管理的内容
- 解决Angular2 (SystemJS) XHR error (404 Not Found) loading traceur
- 华中科技大学计算机就业质量报告,2018年毕业生就业质量报告,复旦大学和华中科大的数据对比...
- 浅谈企业级应用软件开发
- 测试进阶篇之测试用例设计-淘宝购物车