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));
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。