MyBatis 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 語句甚亭,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 語言中的 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)容。所以上述語句的意思非常簡單霜幼, 當(dāng) title!=null 的時(shí)候就輸出 and titlte = #{title}嫩码,不再往下判斷條件,當(dāng)title為空且 content!=null 的時(shí)候就輸出 and content = #{content}罪既,當(dāng)所有條件都不滿足的時(shí)候就輸出 otherwise 中的內(nèi)容铸题。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市琢感,隨后出現(xiàn)的幾起案子丢间,更是在濱河造成了極大的恐慌,老刑警劉巖驹针,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件烘挫,死亡現(xiàn)場離奇詭異,居然都是意外死亡柬甥,警方通過查閱死者的電腦和手機(jī)饮六,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來苛蒲,“玉大人卤橄,你說我怎么就攤上這事〕贩溃” “怎么了虽风?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長寄月。 經(jīng)常有香客問我辜膝,道長,這世上最難降的妖魔是什么漾肮? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任厂抖,我火速辦了婚禮,結(jié)果婚禮上克懊,老公的妹妹穿的比我還像新娘忱辅。我一直安慰自己七蜘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布墙懂。 她就那樣靜靜地躺著橡卤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪损搬。 梳的紋絲不亂的頭發(fā)上碧库,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音巧勤,去河邊找鬼嵌灰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛颅悉,可吹牛的內(nèi)容都是我干的沽瞭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼剩瓶,長吁一口氣:“原來是場噩夢啊……” “哼驹溃!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起儒搭,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吠架,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后搂鲫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡磺平,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年魂仍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片拣挪。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡擦酌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出菠劝,到底是詐尸還是另有隱情赊舶,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布赶诊,位于F島的核電站笼平,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舔痪。R本人自食惡果不足惜寓调,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锄码。 院中可真熱鬧夺英,春花似錦晌涕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至载萌,卻和暖如春驯耻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背炒考。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工可缚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人斋枢。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓帘靡,卻偏偏與公主長得像,于是被迫代替她去往敵國和親瓤帚。 傳聞我的和親對象是個(gè)殘疾皇子描姚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)戈次,斷路器轩勘,智...
    卡卡羅2017閱讀 134,654評論 18 139
  • MySql動(dòng)態(tài)語句 if, set, where , choose, foreach, trim MyBatis的...
    一只阿木木閱讀 1,184評論 0 1
  • 溫馨提示:本文閱讀需要8分鐘,建議收藏后閱讀怯邪! EL表達(dá)式很厲害對不對 今天我們來一個(gè)更厲害的JSTL “為什么說...
    Java聯(lián)盟閱讀 1,260評論 0 1
  • 回首頁 第一部分 Drupal簡介 Drupal overview A tour of Drupal fundam...
    王乂閱讀 2,029評論 0 9
  • 今日所學(xué):《如何有效閱讀一本書:超實(shí)用讀書筆記法》[日] 奧野宣之 一绊寻、三星式篩選法 一星通讀,二星重讀悬秉,三星定位...
    磐石yy閱讀 149評論 0 0