Ibatis:There is no READABLE property named 'userName' in class 'java.lang.String
4645 ワード
ibatis-xx.xmlでは、次の構成が表示されます.
[html]
view plain
copy
print
?
select * from t_user
where 1=1
instr(name,#userName#)>0
このファジイクエリを実行すると、exception:com.ibatis.common.beans.ProbeException: There is no READABLE property named 'userName' in class 'java.lang.String';
次の構成と比較します.
[html]
view plain
copy
print
?
select * from t_user
where 1=1
instr(name,#userName#)>0
上記の構成はクエリーを正常に実行できるのでibatisはxmlをsqlに解析する際にparameterClassのgetter propertyメソッドを探していると推測され、第2のcaseではuserName propertyはparameterClass Userの属性であるため、正常にsqlに解析してクエリー操作を実行することができ、このようにして、第1のcaseではparameterClassはStringクラスであり、propertyはuserNameであり、StringはuserNameのgetterメソッドが見つからず、このため、上記赤色の箇所の異常情報が表示されます.
以上は個人の憶測にすぎず、その原理をよく知っている面倒があれば教えてくれる.
注意:parameterClassがUserオブジェクトではなくStringに設定したい場合は、次の構成(propertyを省略またはvalueに設定)も使用できます.
[html]
view plain
copy
print
?
select * from t_user
where 1=1
instr(name,#userName#)>0
[html]
view plain
copy
?
where
instr(name,#userName#)>0
<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';
次の構成と比較します.
[html]
view plain
copy
?
where
instr(name,#userName#)>0
<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メソッドを探していると推測され、第2のcaseではuserName propertyはparameterClass Userの属性であるため、正常にsqlに解析してクエリー操作を実行することができ、このようにして、第1のcaseではparameterClassはStringクラスであり、propertyはuserNameであり、StringはuserNameのgetterメソッドが見つからず、このため、上記赤色の箇所の異常情報が表示されます.
以上は個人の憶測にすぎず、その原理をよく知っている面倒があれば教えてくれる.
注意:parameterClassがUserオブジェクトではなくStringに設定したい場合は、次の構成(propertyを省略またはvalueに設定)も使用できます.
[html]
view plain
copy
?
where
instr(name,#userName#)>0