[转]MyBatis的foreach语句详解
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();
}
转载于:https://www.cnblogs.com/kunsunshine/p/6402945.html
[转]MyBatis的foreach语句详解相关推荐
- MyBatis的foreach语句详解
http://my.oschina.net/linuxred/blog/38802 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合.foreach元素的属性主要有 ite ...
- mybatis中foreach标签详解
转载自:https://blog.csdn.net/gwd1154978352/article/details/75408498 foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一 ...
- MyBatis SQL语句详解
MyBatis SQL语句详解 1 CRUD标签 1.1 select 1.2 insert 1.3 update 1.4 delete 1.5 #{ }和${ }的区别 2 动态SQL 2.1 if ...
- smarty手册-smarty中foreach循环语句详解
原文地址:smarty手册-smarty中foreach循环语句详解作者:谭博 {foreach}循环也有自身属性的变量,可以通过{$smarty.foreach.name.property}访问,其 ...
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...
- Java教程:Java continue语句详解
Java教程有时强迫一个循环提早反复是有用的,也就是,你可能想要继续运行循环,但是要忽略这次重复剩余的循环体的语句,所以 Java 提供了 continue 语句.continue 语句是 break ...
- MyBatis的缓存机制详解
MyBatis的缓存机制详解 MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制,缓存可以极大的提升查询效率.MyBatis中默认定义了两级缓存,分别是一级缓存和二级缓存. ( ...
- 【MyBatis】MyBatis 二级缓存全详解
1.概述 转载:MyBatis 二级缓存全详解 上一篇文章中我们介绍到了 MyBatis 一级缓存其实就是 SqlSession 级别的缓存,什么是 SqlSession 级别的缓存呢?一级缓存的本质 ...
- 从零学Java(25)之 break语句详解
作者简介 作者名:编程界明世隐 简介:CSDN博客专家,从事软件开发多年,精通Java.JavaScript,博主也是从零开始一步步把学习成长.深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢 ...
最新文章
- 笔记本电脑处理器_苹果高管:我们都没有想到M1的性能有那么强|英特尔|处理器|iphone|ipad|笔记本电脑...
- 在ie7中overflow: hidden失效问题哦及解决方案
- 利用virtualenv和pip构建虚环境并安装配置推送客户端
- onnx:Resize in opset 11 to support Pytorch‘s behavior
- Linux Tomcat 简介
- 绘图基础语法与常用参数
- mapperscan注解_SpringBoot 遗忘后的简单快速回忆之环境搭建与常见注解
- phpadmin 安装
- windows 下使用 nc 命令报错,与 Linux 不同。
- 什么是MPLS?多协议标签交换(MPLS)基础知识和工作原理
- 微信小程序:网课查题微信小程序源码下载,题库资源丰富自动采集,支持语音拍照识别
- LC振荡器的工作原理
- 泰坦尼克号 3D版 Titanic 3D (2012)
- AAAI 2021 Structured Co-reference Graph Attention for Video-grounded Dialogue
- 9530 blackberry 上网
- tipask火车头采集器文章和提问发布模块|非免登录
- iOS总结-Runtime篇之用途及面试题的总结一黑魔法Method Swizzling
- 机器人仿真控制(以ABB为例)
- matlab 蜗杆轮廓,solidworks环面蜗杆画法
- 移动端(手机端)页面自适应解决方案—rem布局篇 1
热门文章
- Makefile的重建与include指令
- 数据结构与算法 -- 再论递归
- 1028 List Sorting
- 2017-9-17pat甲级 B
- Android截屏方法总结
- Android Studio使用Gradle上传AAR至Maven
- 【问链-EOS公开课】第十课 EOS 错误码整理
- 谷歌浏览器中文版_GitHub上最励志的计算机自学教程:8个月,从中年Web前端到亚马逊百万年薪软件工程师 | 中文版...
- Hdu 1754 . I Hate It
- python控制手机自动刷新闻_Python脚本利用adb进行手机控制的方法