collection转换为list_在Mybatis中通过foreach遍历集合(List, Array, Map)

Mybatis框架的动态SQL可以方便的拼接SQL语句,而其foreach标签可用于处理集合类型数据。本文介绍如何使用foreach标签遍历传入的集合(List, Array, Map)

概述

foreach标签,可以实现遍历集合类型(List, Array, Map)数据。该标签包含如下属性: - collection: [必选参数] 需要进行遍历对象对应的键:List对象默认使用list作为键,Array对象默认使用array作为键,Map对象没有默认的键(需要使用@Param注解完成Map对象的绑定,下文将详述),当集合(List, Array, Map)对象为所传实参POJO的一个属性时,集合对象使用属性名作为键 - item: [必选参数] 用于表示每次遍历时的集合中的元素名称,可以通过点操作符访问元素属性。在Map中,表示value - index: [可选参数] List、Array集合中表示元素序号。Map集合中表示key - separator: [可选参数] 两次遍历结果之间所添加的分隔符 - open: [可选参数] 添加在最终遍历结果之前的符号 - close: [可选参数] 添加在最终遍历结果之后的符号

先给出本文代码可能用到的相关POJO类(属性名和数据表的字段均对应)

public 

参数为集合

传入的参数为集合类型时,collection按上文所述配置相应的键即可

List

构造一个Student的List集合对象后传入service

List

Mapper接口如下,service将调用该接口方法

@Mapper
    

传入参数为集合时,映射文件的sql标签parameterType属性可省略。这里由于是List集合,故collection使用默认键list,而item属性可以任意指定,用来标识每次遍历的元素对象名称,这里记为node,则表示每次遍历的元素的属性时,可以使用点操作符,如node.address,node.sex所示

<select 

下图即为上述代码执行后的结果,可以看出正确遍历拼接出List中元素的属性数据

7754d04796456a9101bd6f7f5b7fe821.png

Array

构造一个Student的Array集合对象后传入service

Student

Mapper接口如下,service将调用该接口方法

@Mapper
    

传入参数为集合时,映射文件的sql标签parameterType属性可省略。这里由于是Array,故collection使用默认键array,而item属性可以任意指定,用来标识每次遍历的元素对象名称,这里记为node,则表示每次遍历的元素的属性时,可以使用点操作符,如node.address,node.sex所示。需要注意的是,foreach将遍历数组的所有元素,所以每次取该元素的属性前,需要先对该元素对象进行判空(如下所示)

<select 

下图即为上述代码执行后的结果,可以看出正确遍历拼接出数组中元素的属性数据

b3ddcfea92c3646d62ff7234468f6282.png

Map

构造一个Student的Map集合对象后传入service

Map

Mapper接口如下,service将调用该接口方法,需要注意的是,Map集合在foreach由于没有默认键可用,故需要使用 @Param 注解手动指定一个标识,后面将在foreach中将其作为键使用。该标识任意指定即可,这里使用"stuMap"

@Mapperpublic 

传入参数为集合时,映射文件的sql标签parameterType属性可省略。由于是Map集合,collection无默认键,故配置其为对应的接口方法中的形参前的@Param注解中的标识(此处即为"stuMap")。由于是Map集合,index、item属性分别表示为该Map集合中的key、value,故可以分别用${k},#{v}来获取该Map集合中的key、value

<select 

下图即为上述代码执行后的结果,可以看出正确遍历拼接出Map集合中key-value数据

86968bd0e610b5b128420ec0337d022b.png

参数为包含集合属性的POJO

传入的参数为一个POJO,其属性中有集合类型时,collection直接配置为相应集合中的属性名即可

POJO 属性为 List

构造下列一个UserVo对象同时设置一个List集合属性,传入service

UserVo 

Mapper接口如下,service将调用该接口方法

public 

传入参数为UserVo类型,故映射文件的sql标签parameterType属性配置为UserVo。该POJO的stuList属性为List集合类型,在遍历该属性的List集合时,collection配置为该属性名stuList即可。而item属性可以任意指定,用来标识每次遍历的元素对象名称,这里记为node,则表示每次遍历的元素的属性时,可以使用点操作符,如node.address,node.sex所示

<select 

下图即为上述代码执行后的结果,可以看出正确遍历拼接出List中元素的属性数据

906df76d442bfda7c1e74ab109513e58.png

POJO 属性为 Array

构造下列一个UserVo对象同时设置一个Array属性,传入service

UserVo 

Mapper接口如下,service将调用该接口方法

public 

传入参数为UserVo类型,故映射文件的sql标签parameterType属性配置为UserVo。该POJO的stuArray属性为Array类型,在遍历该属性的Array时,collection配置为该属性名stuArray即可。而item属性可以任意指定,用来标识每次遍历的元素对象名称,这里记为node,则表示每次遍历的元素的属性时,可以使用点操作符,如node.address,node.sex所示。需要注意的是,foreach将遍历数组的所有元素,所以每次取该元素的属性前,需要先对该元素对象进行判空(如下所示)

<select 

下图即为上述代码执行后的结果,可以看出正确遍历拼接出数组中元素的属性数据

bf0b2eefcfacffa1c351050c160c8e63.png

POJO 属性为 Map

构造下列一个UserVo对象同时设置一个Map属性,传入service

UserVo 

Mapper接口如下,service将调用该接口方法

public 

传入参数为UserVo类型,故映射文件的sql标签parameterType属性配置为UserVo。该POJO的stuMap属性为Map类型,在遍历该属性的Map时,collection配置为该属性名stuMap即可。由于是Map集合,index、item属性分别表示为该Map集合中的key、value,故可以分别用${k},#{v}来获取该Map集合中的key、value

<select 

下图即为上述代码执行后的结果,可以看出正确遍历拼接出Map集合中key-value数据

bccbe17942afbf37668ce2a53c0904a3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值