当我在做in查询的时候,发现在网上有很多种写法:
接口
public List<CaseReview > findList(CaseReview caseReview);
类
public class CaseReview{
private String caseNo;
private List<String> caseNos;//caseNo
//===gettter,setter省略===
}
1.我就随便用了一种传list,再foreach循环;具体如下:
t.case_no in
<foreach item="item" index="index" collection="caseNos" open="(" separator="," close=")">
#{item}
</foreach>
然而报:
org.apache.ibatis.reflection.ReflectionException: There is no getter for property named '__frch_item_0' in 'class
于是解决办法就出来了:
就是将 #{item} 改为 ‘${item}’就搞定了
<foreach item="item" index="index" collection="caseNos" open="(" separator="," close=")">
'${item}'
</foreach>
如果你非要用#也不是不可以
<foreach item="item" index="index" collection="caseNos" open="(" separator="," close=")">
#{caseNos[${index}]}
</foreach>
还有两种in查询方法,其实都在做foreach循环遍历
2:findByCaseNos(Long[] caseNos)
如果参数的类型是Array,则在使用时,collection属性要必须指定为 array
caseNos in
<foreach item="item" index="index" collection="array" open="(" separator="," close=")">
#{caseNos}
</foreach>
3 . findByCaseNos(String name, Long[] caseNos)
当查询的参数有多个时:
这种情况需要特别注意,在传参数时,一定要改用Map方式, 这样在collection属性可以指定名称
Map<String, Object> params = new HashMap<String, Object>();
params.put("name", name);
params.put("ids", caseNos);
mapper.findByIdsMap(params);
caseNos in
<foreach item="item" index="index" collection="caseNos" open="(" separator="," close=")">
#{item}
</foreach>