1. 程式人生 > >關於mybatis中基本型別條件判斷問題

關於mybatis中基本型別條件判斷問題

一:發現問題

sql動態語句中如果 parameterType="int"

<select id="sel_campusinfo" parameterType="int" resultType="Campusinfo">
 		select cmpid,cmpname from campusinfo where state!='d' and cmpid=#{cmpid}
 </select>
是正確的,但是如果加上if test
<select id="sel_campusinfo" parameterType="int" resultType="Campusinfo">
 		select cmpid,cmpname from campusinfo where state!='d' and cmpid!=0
 		<if test="cmpid!=0">and cmpid=#{cmpid}</if>
 </select>

則報錯:
There is no getter for property named 'cmpid' in 'class java.lang.Integer' 

出錯原因:Mybatis預設採用ONGL解析引數,所以會自動採用物件樹的形式取Integer.cmpid。Integer物件沒有cmpid屬性。如果不解析引數,mybatis自動識別傳入的引數,不會報錯。

二:解決辦法

1.修改select語句
<select id="sel_campusinfo" parameterType="int" resultType="Campusinfo">
 		select cmpid,cmpname from campusinfo where state!='d' and cmpid!=0
 		<if test="_parameter!=0">and cmpid=#{_parameter}</if>
 	</select>

引數名全部改為_parameter。

2.不修改sql,只修改介面

介面類:

Campusinfo sel_campusinfo( int cmpid);

改為:

Campusinfo sel_campusinfo(@Param(value="cmpid") int cmpid);
3.可以將引數包裝在hashmap或者物件中作為引數