mybatis如何对参数collection进行循环(foreach)呢?

乔欣 MyBatis 发布时间:2023-02-18 07:02:25 阅读数:11811 1
下文笔者讲述使用mybatis框架时,对mapper.xml编写时,
经常对一些参数为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)); 
 
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaFramework/MyBatis/202302/5840.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者