鍍金池/ 教程/ Java/ MyBatis choose(when, otherwise)標(biāo)簽
Mybatis表關(guān)聯(lián)多對(duì)一
MyBatis打印輸出SQL語(yǔ)句
Mybatis表關(guān)聯(lián)一對(duì)多
mybaits if標(biāo)簽語(yǔ)句
MyBatis整合Spring MVC
MyBatis動(dòng)態(tài)SQL語(yǔ)句
MyBatis教程
MyBatis choose(when, otherwise)標(biāo)簽
Mybatis與Spring集成
MyBatis分頁(yè)
MyBatis SqlSessionDaoSupport實(shí)例
MyBatis where標(biāo)簽語(yǔ)句
Mybatis增刪改查(CURD)
Mybatis接口注解
Mybatis trim標(biāo)簽
Mybatis set標(biāo)簽
Mybatis 多對(duì)多
MyBatis環(huán)境配置及入門

MyBatis choose(when, otherwise)標(biāo)簽

choose (when, otherwise)標(biāo)簽

有時(shí)候我們并不想應(yīng)用所有的條件,而只是想從多個(gè)選項(xiàng)中選擇一個(gè)。而使用if標(biāo)簽時(shí),只要test中的表達(dá)式為 true,就會(huì)執(zhí)行 if 標(biāo)簽中的條件。MyBatis 提供了 choose 元素。if標(biāo)簽是與(and)的關(guān)系,而 choose 是或(or)的關(guān)系。

choose標(biāo)簽是按順序判斷其內(nèi)部when標(biāo)簽中的test條件出否成立,如果有一個(gè)成立,則 choose 結(jié)束。當(dāng) choose 中所有 when 的條件都不滿則時(shí),則執(zhí)行 otherwise 中的sql。類似于Java 的 switch 語(yǔ)句,choose 為 switch,when 為 case,otherwise 則為 default。

例如下面例子,同樣把所有可以限制的條件都寫上,方面使用。choose會(huì)從上到下選擇一個(gè)when標(biāo)簽的test為true的sql執(zhí)行。安全考慮,我們使用where將choose包起來,放置關(guān)鍵字多于錯(cuò)誤。

<!--  choose(判斷參數(shù)) - 按順序?qū)?shí)體類 User 第一個(gè)不為空的屬性作為: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) ,相當(dāng)于java 語(yǔ)言中的 switch ,與 jstl 中 的 choose 很類似。

<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元素表示當(dāng) when 中的條件滿足的時(shí)候就輸出其中的內(nèi)容,跟 JAVA 中的 switch 效果差不多的是按照條件的順序,當(dāng) when 中有條件滿足的時(shí)候,就會(huì)跳出 choose,即所有的 when 和 otherwise 條件中,只有一個(gè)會(huì)輸出,當(dāng)所有的我很條件都不滿足的時(shí)候就輸出 otherwise 中的內(nèi)容。所以上述語(yǔ)句的意思非常簡(jiǎn)單, 當(dāng) title!=null 的時(shí)候就輸出 and titlte = #{title},不再往下判斷條件,當(dāng)title為空且 content!=null 的時(shí)候就輸出 and content = #{content},當(dāng)所有條件都不滿足的時(shí)候就輸出 otherwise 中的內(nèi)容。