零:sql動態語句中經常會有根據數據庫某個字段狀態進行判斷的
如:status=0為未激活,status=1為激活的,那搜索未激活時:
<if test="model.activeStatus != null and model.activeStatus !='' or model.activeStatus==0"> and status=#{model.activeStatus} </if>
但由於java的int類型默認值為0,導致0與null的判定無法識別。解決辦法:
1、int修改為Integer類型
2、參數不要帶activeStatus變量名,如:json的請求參數中不要帶activeStatus參數名稱。(未驗證)
一:發現問題
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);
改為:
3.可以將參數包裝在hashmap或者對象中作為參數
