mybatis的 choose -- when test -- otherwise 標籤和 if test 標籤的區別

HD243608836發表於2018-05-05

1.choose標籤是按順序判斷其內部when標籤中的test條件出否成立,如果有一個成立,則 choose 結束。 

當 choose 中所有 when 的條件都不滿則時,則執行 otherwise 中的sql。類似於Java 的 switch 語句,choose 為 switch,when 為 case,otherwise 則為 default。例如下面例子,同樣把所有可以限制的條件都寫上,方面使用。choose會從上到下選擇一個when標籤的test為true的sql執行。安全考慮,我們使用where將choose包起來,放置關鍵字多於錯誤。

<!--  choose(判斷引數) - 按順序將實體類 User 第一個不為空的屬性作為:where條件 -->  
<select id="getUserList_choose" resultMap="resultMap_user" parameterType="com.yiibai.pojo.User">  
    SELECT *  
      FROM User u   
    <where>  
        <choose>  
            <when test="username !=null ">  
                u.username LIKE CONCAT(CONCAT('%', #{username, jdbcType=VARCHAR}),'%')  
            </when >  
            <when test="sex != null and sex != '' ">  
                AND u.sex = #{sex, jdbcType=INTEGER}  
            </when >  
            <when test="birthday != null ">  
                AND u.birthday = #{birthday, jdbcType=DATE}  
            </when >  
            <otherwise>  
            </otherwise>  
        </choose>  
    </where>    
</select>  

2.if-test 不會跳出判斷語句

2.1 if-test標籤判斷語法: 
@see http://blog.csdn.net/z69183787/article/details/51589171 
用==判斷時應寫成

<if test='type=="y"'>  
    and status = 0   
</if>  
  • 1
  • 2
  • 3

而不是

<if test="type=='y'">  
    and status = 0   
</if>  
  • 1
  • 2
  • 3

mybatis是使用的OGNL表示式來進行解析的,在OGNL的表示式中,’y’會被解析成字元,因為java是強型別的,char 和 一個string 會導致不等。所以if標籤中的sql不會被解析。具體的請參照 OGNL 表示式的語法


轉載自:https://blog.csdn.net/sinat_34814635/article/details/78465631

相關文章