MyBatis choose(when, otherwise)標籤

choose (when, otherwise)標籤

有時候咱們並不想應用全部的條件,而只是想從多個選項中選擇一個。而使用if標籤時,只要test中的表達式爲 true,就會執行 if 標籤中的條件。MyBatis 提供了 choose 元素。if標籤是與(and)的關係,而 choose 是或(or)的關係。java

choose標籤是按順序判斷其內部when標籤中的test條件出否成立,若是有一個成立,則 choose 結束。當 choose 中全部 when 的條件都不滿則時,則執行 otherwise 中的sql。相似於Java 的 switch 語句,choose 爲 switch,when 爲 case,otherwise 則爲 default。sql

例以下面例子,一樣把全部能夠限制的條件都寫上,方面使用。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>  

choose (when,otherwize) ,至關於java 語言中的 switch ,與 jstl 中 的 choose 很相似。yii

<select id="dynamicChooseTest" parameterType="Blog" resultType="Blog">
        select * from t_blog where 1 = 1 
        <choose>
            <when test="title != null">
                and title = #{title}
            </when>
            <when test="content != null">
                and content = #{content}
            </when>
            <otherwise>
                and owner = "owner1"
            </otherwise>
        </choose>
    </select>

when元素表示當 when 中的條件知足的時候就輸出其中的內容,跟 JAVA 中的 switch 效果差很少的是按照條件的順序,當 when 中有條件知足的時候,就會跳出 choose,即全部的 when 和 otherwise 條件中,只有一個會輸出,當全部的我很條件都不知足的時候就輸出 otherwise 中的內容。因此上述語句的意思很是簡單, 當 title!=null 的時候就輸出 and titlte = #{title},再也不往下判斷條件,當title爲空且 content!=null 的時候就輸出 and content = #{content},當全部條件都不知足的時候就輸出 otherwise 中的內容。ide

相關文章
相關標籤/搜索