如何传多个值,通过hashMap
一个包含List元素的HashMap参数赋给sqlMap
public int getCountById(Integer dataType, List ids) throws Exception {
Map paramMap=new HashMap();
paramMap.put("dataType", dataType);
paramMap.put("orgIds",ids);
return (int) this.sqlMapClient.queryForObject("listTeamStaffByOrgId", paramMap);
}
<!-- 根据机构id获取团队长列表 -->
<select id="listTeamStaffByOrgId" parameterClass="java.util.Map"
resultClass="OrgTeam">
select *
from org_team ot, staff s
where
ot.team_staff_id is not null
and ot.team_staff_id = s.staff_id
<isNotEmpty property="orgIds">
and ot.org_id in
<iterate open="(" close=")" conjunction="," property="orgIds">
#orgIds[]#
</iterate>
</isNotEmpty>
<isEqual property="dataType" compareValue="1">
and ot.team_name not like '%测试%'
and ot.team_staff_name not like '%测试%'
</isEqual>
</select>
1:<iterate> 标签要写上orgIds,表示获得Map中属性为orgIds,不写会报错误
Cause: com.ibatis.sqlmap.client.SqlMapException: ParameterObject or property was not a Collection, Array or Iterator.)
2:#orgIds[]# 中的[]只有这样ibatis才能把orgIds作为一个可迭代的对象
There is no READABLE property named ‘userName’ in class ‘java.lang.String’
类似这样问题:就是ibatis没有获得到数据,请看两个例子
<select id="selectAllUsers" resultClass="User" parameterClass="java.lang.String">
select * from t_user
where
1=1
<dynamic>
<isNotEmpty prepend="and" property="userName">
instr(name,#userName#)>0
</isNotEmpty>
</dynamic>
</select>
此时执行此模糊查询,出现如下异常:exception: com.ibatis.common.beans.ProbeException: There is no READABLE property named ‘userName’ in class ‘Java.lang.String’;
正确配置:
<select id="selectAllUsers" resultClass="User" parameterClass="User">
select * from t_user
where
1=1
<dynamic>
<isNotEmpty prepend="and" property="userName">
instr(name,#userName#)>0
</isNotEmpty>
</dynamic>
</select>
上述配置是能正常执行查询的,故猜测ibatis在解析xml成sql时,会寻找parameterClass的getter property方法,第二种case中,userName property正是parameterClass User的属性,故能正常解析为sql,进而执行查询操作,以此类推,第一种case中,parameterClass 是String类,而property是userName,String寻找不到userName的getter方法,故会出现上述红色处的异常信息。
注:如果parameterClass确实只想设置为String,而不是一个User对象,那么也可以采用下面的配置(将property省去或设置为value即可):
<select id="selectAllUsers" resultClass="User" parameterClass="java.lang.String">
select * from t_user
where
1=1
<dynamic>
<isNotEmpty prepend="and" property="value">
instr(name,#userName#)>0
</isNotEmpty>
</dynamic>
</select>