在使用这个功能是需要特别注意以下规则:
1. 当查询的参数只有一个时
A. 如果参数的类型是List, 则在使用时,collection属性要必须指定为 list
findByIds(List<Long> ids)
<select id="findByIdsMap" resultMap="BaseResultMap">
Select
<include refid="Base_Column_List" />
from sys_user where user_id in
<foreach item="item" index="index" collection="list"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
B. 如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
findByIds(Long[] ids)
<select id="findByIdsMap" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sys_user where user_id in
<foreach item="item" index="index" collection="array"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
2、当查询的参数有多个时,例如 findByIds(String name, Long[] ids)//这种方式不推荐使用
这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称
下面是一个示例
Map<String, Object> params = new HashMap<String, Object>(2);
params.put("name", name);
params.put("shxt", ids);
mapper.findByIdsMap(params);
<select id="findByIdsMap" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from sys_user where user_id in
<foreach item="item" index="index" collection="shxt"
open="(" separator="," close=")">
#{item}
</foreach>
</select>
3、本人实际使用例子
@Override
public List<PointsSummaryForMonths> pointsForPduMonthForIN() {
List<CustomPdu> list = customPduMapper.getPidFromCustomPdu();
List<Integer> list1 = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
int pduId = list.get(i).getPid();
list1.add(pduId);
}
List<String> list2=DateUtil.getMonthList();
Map<String, Object> pduIdMap = new HashMap<>();
pduIdMap.put("listone", list1);
pduIdMap.put("listtwo",list2);
//Map<String,Object> monthMap=new HashMap<>();
// monthMap= DateUtil.getDateMap();
return pointsSummaryForMonthsMapper.pointsForPduMonthForIN(pduIdMap);
}
List<PointsSummaryForMonths> pointsForPduMonthForIN(Map map);
WHERE
jira.PROJECT in
<foreach collection="listone" index="index" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
AND it.ID IN ("10001", "10102", "10100")
AND jira.issuestatus = "10001"
GROUP BY pro.pname,
date_format(doneTable.doneDate, '%Y-%m'))as tabletwo
where tabletwo.month in
<foreach collection="listtwo" index="index" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>