mybatis中如何遍历集合

以下是根据自己在实际项目中遇到的一个问题总结的关于mybatis中foreach的用法

需求:要查询同时具有某些资质(资质表SUPPLIER_APTITUDE)的供应商(供应商表SUPPLIER_INFO)

数据库实现语句:(假设要查找的资质名称为‘ISO’和'SMII')

select * from SUPPLIER_INFO where  SUPPLIER_ID in

(select SUPPLIER_ID from SUPPLIER_APTITUDE

where APTITUDE_NAME like 'ISO'

intersect

select SUPPLIER_ID from SUPPLIER_APTITUDE

w here APTITUDE_NAME like 'SMII'

)

mybatis实现语句

 
 
<select id="selectSupplierByWhere" resultType="Supplier">

select * from SUPPLIER_INFO where  SUPPLIER_ID in

<foreach collection=’aptitudeNameList’  item=”aptitudeName” index=index open=”(”   separator=” intersect” close=”)”>

select SUPPLIER_ID from SUPPLIER_APTITUDE Where APTITUDE_NAME like ‘%’ || #{aptitudeName} || ‘%’

</foreach>

其中:

collection表示所要遍历的集合,属性类型可以是List,Array,Map

  1. 如果传入的是单参数且参数类型是一个List的时候,collection属性值为list .
  2. 如果传入的是单参数且参数类型是一个array数组的时候,collection的属性值为array .
  3. 如果传入的参数是多个的时候,我们就需要把它们封装成一个Map了,当然单参数也可以封装成map,实际上如果你在传入参数的时候,在MyBatis里面也是会把它封装成一个Map的,map的key就是参数名,所以这个时候collection属性值就是传入的List或array对象在自己封装的map里面的key.

item表示集合中每一个元素进行迭代是的别名(#{}中的名要与item一致)

index表示迭代过程中迭代到的位置

open表示语句以什么开始,close表示以什么结束和open成对出现

separator表示每次迭代之间以什么作为分隔符,常用的有,/or/and等等



猜你喜欢

转载自blog.csdn.net/aawmx123/article/details/59117358
今日推荐