20、动态SQL之<foreach>标签
2018-01-23 00:06
302 查看
有时传入SQL语句中的参数为一个集合,在SQL语句中就需要遍历集合中的每一个参数,此时就需要用到了
下面在mybatis中实现该SQL语句,首先定义对应的DAO接口:
接口中传入的ids为一个List集合类型,里面传入[1,2,3]参数。
该sql语句对应的mapper实现为:
在上面用
假设传入的List类型的ids为[1,2,3],遍历集合中所有的值后,并用separator=”,”指定的”,”把3个参数隔开,即拼接的字符串为:“1,2,3”;open=”where id in(“指定拼接的字符串开始字符串,因此拼接后的字符串变为:”where id in(1,2,3”;close=”)”指定拼接后的字符串要以”)”结束,因此拼接后的字符串变为:”where id in(1,2,3)”。
因此当输入的参数为[1,2,3]时,SQL语句就变成了:
当然用 拼接成指定的字符串的方法很多,例如下面:
<foreach>标签。下面以具体情况演示
一、查询
查询PERSON表中id={1,2,3}的记录,SQL语句为:select * from PERSON where id in (1,2,3)
下面在mybatis中实现该SQL语句,首先定义对应的DAO接口:
public interface PersonDao { public List<Person> getPerson(@Param("ids")List<Integer> ids); }
接口中传入的ids为一个List集合类型,里面传入[1,2,3]参数。
该sql语句对应的mapper实现为:
<mapper namespace="com.lzj.mybatis.dao.PersonDao"> <!-- collection:指定要遍历的集合: list类型的参数会特殊处理封装在map中,map的key就叫list item:将当前遍历出的元素赋值给指定的变量 separator:每个元素之间的分隔符 open:遍历出所有结果拼接一个开始的字符 close:遍历出所有结果拼接一个结束的字符 index:索引。遍历list的时候是index就是索引,item就是当前值 遍历map的时候index表示的就是map的key,item就是map的值 #{变量名}就能取出变量的值也就是当前遍历出的元素 --> <select id="getPerson" resultType="com.lzj.mybaits.bean.Person"> select * from PERSON <foreach collection="ids" item="item_id" separator="," open="where id in(" close=")"> #{item_id} </foreach> </select> </mapper>
在上面用
<foreach>实现遍历,把输入的List类型的参数ids放入collection属性中;item=”item_id”表示每次循环ids中的值放入item_id变量中;open=”where id in(“表示
<foreach>标签包裹的字符串拼接后的结果要以”where id in(“开始,即在拼接的字符串前面加上”where id in(“字符串;close=”)”表示
<foreach>标签包裹的字符串拼接后的结果要以”)”结束,即在拼接后的字符串后面加上”)”;separator=”,”表示从List类型的ids变量中遍历的每个参数值要以”,”隔开,并拼接起来。
假设传入的List类型的ids为[1,2,3],遍历集合中所有的值后,并用separator=”,”指定的”,”把3个参数隔开,即拼接的字符串为:“1,2,3”;open=”where id in(“指定拼接的字符串开始字符串,因此拼接后的字符串变为:”where id in(1,2,3”;close=”)”指定拼接后的字符串要以”)”结束,因此拼接后的字符串变为:”where id in(1,2,3)”。
因此当输入的参数为[1,2,3]时,SQL语句就变成了:
select * from PERSON where id in(1,2,3)
当然用 拼接成指定的字符串的方法很多,例如下面:
<select id="getPerson" resultType="com.lzj.mybaits.bean.Person"> select * from PERSON where id in( <!--此时没有用open和close属性--> <foreach collection="ids" item="item_id" separator=","> #{item_id} </foreach> ) </select> </mapper>
相关文章推荐
- Mybatis 最强大的动态sql <where>标签
- 18、动态SQL之<choose><when><otherwise>标签
- 22、动态SQL之<bind>标签使用
- 19、动态SQL之<set><if>标签的使用
- MyBatis动态SQL<choose>标签的使用
- MyBatis动态SQL <trim></trim>标签的明白理解
- jsp页面动态展示list-使用<select>和<c:forEach>标签
- JSTL中<c:forEach>标签中varStatus属性
- JSTL中<c:forEach ...>标签详解
- Jsp中如何在<c:forEach >标签内获取items集合的长度方法
- jstl <c:forEach>标签
- SQL语句中的<where><if>标签和 to_number()函数
- Jsp标签之<c:forEach>
- JSTL <c:forEach> 标签终止循环
- mybatis <forEach>标签的使用
- JSTL Core标签库 c:if标签 条件标签 <c:forEach>:<c:forTokens>:迭代标签
- 如何在标签<a>中跨网页动态获取传递的值
- jstl <c:forTokens>标签,<c:forEach>标签
- jstl标签中<c:forEach>中的varStatus属性
- Mybatis的<where><foreach><set>等标签详解