mybatis如何对参数collection进行循环(foreach)呢?
下文笔者讲述使用mybatis框架时,对mapper.xml编写时,
经常对一些参数为list或数组等集合类型时,编写批量sql语句的方法分享,如下所示
Dao之Mapper文件
传入参数为Array
Dao之Mapper文件
传入参数为Map
Dao之Mapper文件
经常对一些参数为list或数组等集合类型时,编写批量sql语句的方法分享,如下所示
mybatis之xml遍历的方式分享
实现思路:
mapper.xml中需编写循环语句时,需借助foreach标签
foreach标签中有以下几个属性:
item,index,collection,open,separator,close
item:必须参数,集合中元素迭代时的别名
index:可选参数
当遍历数据为list和数组中,index是元素的序号
当遍历数据为map中时,index是元素的key
open:可选参数
foreach代码的开始符号,一般是(和close=")"合用
常用在in(),values()时
separator:可选参数
元素之间的分隔符
如在in()的时候,separator=","会自动在元素中间用“,“隔开
避免手动输入逗号导致sql错误
如:
in(88,99,)这样。该参数可选。
close: 可选参数
foreach代码的关闭符号
常使用)和open="("合用
用于in(),values()时
collection: 必填参数
foreach的操作对象
作为入参时,List对象默认用"list"代替作为键
数组对象有"array"代替作为键
Map对象没有默认的键
注意事项:
collection入参时,不能使用@Param("keyName")来设置键
当设置keyName后,list和array将会失效
当collection入参数对象的某个字段的时候
例1:
当User中属性List ids
入参是User对象,则这个collection = "ids"
例2:
User有属性Ids ids
其中Ids是个对象,Ids有个属性List id
入参是User对象
则循环信息为ids.id 如:collection = "ids.id"
mapper.xml之foreach使用的三种场景
场景1:
当传入的是单参数且参数类型是一个List时
collection属性值为list
场景2:
当传入的是单参数且参数类型是一个array数组时
collection属性值为array
场景3:
当传入的参数是多个的时候,此时我们需要将它们封装成一个Map
注意单个参数也需要使用Map进行封装
map的key是参数名,将list或array放入到map的value中
例Dao之Mapper文件
public List<User> selectByIds(List<Integer> userIds);xml文件
<select id="selectByIds" resultType="com.java265.pojo.User">
select * from sys_user where id in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
例2:传入参数为Array
Dao之Mapper文件
public List<User> selectByIds(int[] userIds);xml文件
<select id="selectByIds" resultType="com.java265.pojo.User">
select * from sys_user where id in
<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
例3:传入参数为Map
Dao之Mapper文件
public List<User> selectByIds(Map<String, Object> params);xml文件
<select id="selectByIds" resultType="com.java265.pojo.User">
select * from sys_user where id in
<foreach collection="userIds" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
Map 参数生成示例:
map.put("userIds",userIds));
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


