mybatis foreach 嵌套的foreach 可以嵌套吗

业务场景:csv文件导入,csv第三方jar读取的数据为string数组,需要将整个csv中n行数据(即长度为N的List)插入库中
1、笨方法,将String[]一一拆分,封装成对象或者M...
一、介绍:
foreach主要是用于一个循环,大部分用到的是循环的生成sql,下面说一下动态foreach的属性:
foreach元素的属性主要有item,index,collection...
(由于csdn抽风,所以删除两篇重复内容重发)
foreach一共有三种类型,分别为List,[](array),Map三种。
foreach的第一篇用来将List和数组(array)。
foreach标签
下面介绍一下一个mapper配置文件中的foreach标签(注意,要跟着前面的总结来看,这里使用的例子是结合前面的工程写的,大部分代码没有再赘述)
foreach的作用...
foreach的主要构建
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时...
在实际开发过程中遇到需要批量插入、批量更新、批量删除等操作,纠结于是在service层中直接调用dao层的方式还是直接使用Mybatis中的标签,因此特地做了一个实验。
需求:查出给定id的记录:
SELECT * FROM tb1_emplyee WHERE id IN
#{item_id}
oracle的批量插入方式是:
into db(id, zgbh, shbzh)
select '1', '2', '3' from dual
foreach的主要用在构建in条件中,它可以在SQL语句中进行迭代一个集合。foreach元素的属性主要有 item,index,collection,open,separator,close。it...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)传参参考:
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的类型:&&
<span style="color: # &select id="dynamicForeachTest" parameterType="java.util.List" resultType="Blog"&
<span style="color: #
select * from t_blog where id in
<span style="color: #
&foreach collection="list" index="index" item="item" open="(" separator="," close=")"&
<span style="color: #
<span style="color: #
&/foreach&
<span style="color: #
上述collection的值为list,对应的Mapper是这样的public List dynamicForeachTest(List ids);测试代码:
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);
<span style="color: #
for (Blog blog : blogs)
<span style="color: #
System.out.println(blog);
<span style="color: #
session.close();
<span style="color: #
2.单参数array数组的类型:
<span style="color: # &select id="dynamicForeach2Test" parameterType="java.util.ArrayList" resultType="Blog"&
<span style="color: #
select * from t_blog where id in
<span style="color: #
&foreach collection="array" index="index" item="item" open="(" separator="," close=")"&
<span style="color: #
<span style="color: #
&/foreach&
<span style="color: # &/select&
上述collection为array,对应的Mapper代码:public List dynamicForeach2Test(int[] ids);对应的测试代码:& & &&
2 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();
<span style="color: # }
3.自己把参数封装成Map的类型
<span style="color: # &select id="dynamicForeach3Test" parameterType="java.util.HashMap" resultType="Blog"&
<span style="color: #
select * from t_blog where title like "%"#{title}"%" and id in
<span style="color: #
&foreach collection="ids" index="index" item="item" open="(" separator="," close=")"&
<span style="color: #
<span style="color: #
&/foreach&
<span style="color: # &/select&
上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:public List dynamicForeach3Test(Map params);对应测试代码:& &&
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主要是用于一个循环,大部分用到的是循环的生成sql,下面说一下动态foreach的属性:
foreach元素的属性主要有item,index,collection...
http://www.suyunyou.com/aid5.html参考
mybatis处理集合、循环、数组和in等语句的使用
在Mybatis的xml配置中使用集合,主要是用到了foreach...
业务场景:csv文件导入,csv第三方jar读取的数据为string数组,需要将整个csv中n行数据(即长度为N的List)插入库中
1、笨方法,将String[]一一拆分,封装成对象或者M...
在mybatis的mapper配置文件中,可以利用标签实现sql条件的循环,可完成类似批量的sql
mybatis接受的参数分为:(1)基本类型(2)对象(3)List(4)数组(5)Map
(由于csdn抽风,所以删除两篇重复内容重发)
foreach一共有三种类型,分别为List,[](array),Map三种。
foreach的第一篇用来将List和数组(array)。
mybatis 多字段、多表批量更新,判断条件也批量改变
原文:http://blog.csdn.net/linminqin/article/details/
-----------------------------------------...
-- mybatise xml可以循环list/map等
UPDATE `standard_switchover` set sort=
#{sortMap[${ke...
最近一个项目用到mybatis,花了一点时间看了官方文档,后面就搭建起了框架,着手进行开发,mybatis上手很容易,但是有一些小的细节的注意(下文说明),否则错误很难查找,对于用惯了Hibernat...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)博客分类:
1、mybatis循环删除数据的sql
循环删除时,要求相应的Mapper方法传递的参数是一个集合(如List),在&delete&标签的参数中设置parameterType="java.util.List",书写sql语句时,使用&foreach&标签循环,其中collection表示Mapper中传递的参数名,item便是循环时压入栈顶的元素,open表示第一次加入的sql前缀,separator表示集合中每个元素之间的分隔符,colse表示循环结束时为sql语句添加的后缀。具体配置如下:
&delete id="deleteList" parameterType="java.util.List"&
DELETE FROM CITY WHERE 1 = 1
&foreach collection="list" item="item" open="AND CITY_NO IN(" separator="," close=")"&
#{item.cityNo}
&/foreach&
2、mybatis中Mapper方法传递多个参数对象
如果在Mapper中的方法中传递了多个参数对象,可以在service层进行封装(系统的流程为controller-&service-&mapper),将多个参数封装到map中,用key值进行区别,然后在mapper.xml中的配置如下:
&select id="findByPage" resultMap="listCityMap" parameterType="java.util.Map"&
SELECT CITY_NO, CITY_NAME, PROVINCE_NO FROM CITY WHERE 1 = 1
&if test="city.cityNo != null and city.cityNo != '' "&
AND CITY_NO = #{city.cityNo}
&if test="city.cityName != null and city.cityName != ''"&
AND CITY_NAME = #{city.cityName}
&if test="city.provinceNo != null and city.provinceNo != ''"&
AND PROVINCE_NO = #{city.provinceNo}
LIMIT #{page.startRowNum}, #{page.pageSize}
其中在Mapper.xml的&select&标签的参数中设置parameterType="java.util.Map",在service方法中,有page和city2个形参,故在service的方法中进行如下处理:
public List&City& findByPage(SimplePage page, City city) {
Map&String, Object& paramMap = new HashMap&String, Object&();
paramMap.put("page", page);
paramMap.put("city", city);
return cityMapper.findByPage(paramMap);
浏览 23972
yangyongByJava
浏览: 91604 次
来自: 上海
* @param strXml
遍历对象属性的时候为嘛不直接用反射查找对象属性,感觉你这样反射 ...
yangyongByJava 写道cfying 写道请问,可是 ...
好!http://git.oschina.net/shengz ...
cfying 写道请问,可是为什么会执行两边啊?QQ:3429 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'MyBatis的foreach语句详解
MyBatis的foreach语句详解
1人收藏此文章, 我要收藏
发表于3个月前 , 已有113次阅读 共个评论
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,实际上如果你在传入参数的时候,在里面也是会把它封装成一个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=")"&
&/foreach&
上述collection的值为list,对应的Mapper是这样的
public List&Blog&
dynamicForeachTest(List&Integer&
测试代码:
&&& 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=")"&
&/foreach&
上述collection为array,对应的Mapper代码:
public List&Blog&
dynamicForeach2Test(int[] ids);
对应的测试代码:
&&& 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=")"&
&/foreach&
上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:
public List&Blog&
dynamicForeach3Test(Map&String,
Object& params);
对应测试代码:
&&& public void
dynamicForeach3Test() {
&&& SqlSession
session = Util.getSqlSessionFactory().openSession();
&&& BlogMapper
blogMapper = session.getMapper(BlogMapper.class);
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();
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 jstl foreach 嵌套 的文章

 

随机推荐