Ibatis 中关于sql动态传值问题

如何传多个值,通过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>  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值