Ibatis:There is no READABLE property named 'userName' in class 'java.lang.String'

   ibatis-xx.xml出现如下配置:

   

<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>



  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值