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


零: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); 

改為:

Campusinfo sel_campusinfo(@Param(value="cmpid") int cmpid); 

3.可以將參數包裝在hashmap或者對象中作為參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM