欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis<choose>動(dòng)態(tài)SQL用法詳解

 更新時(shí)間:2025年09月21日 15:59:33   作者:night_gu  
MyBatis <choose>動(dòng)態(tài)SQL標(biāo)簽用于多條件分支查詢(xún),按順序判斷<when>條件,僅執(zhí)行第一個(gè)匹配項(xiàng),無(wú)匹配則執(zhí)行<otherwise>,與<if>不同,它不拼接所有滿足條件的片段,適用于優(yōu)先級(jí)排序、枚舉處理等場(chǎng)景

MyBatis<choose>動(dòng)態(tài)SQL

<choose> 是 MyBatis 動(dòng)態(tài) SQL 中的一個(gè)標(biāo)簽,用于實(shí)現(xiàn)類(lèi)似 Java 中的 switch-case 邏輯。

它通常與 <when><otherwise> 配合使用,根據(jù)條件選擇不同的 SQL 片段執(zhí)行。

基本語(yǔ)法結(jié)構(gòu)

<choose>
    <when test="condition1">
        <!-- SQL 片段1 -->
    </when>
    <when test="condition2">
        <!-- SQL 片段2 -->
    </when>
    <otherwise>
        <!-- 默認(rèn) SQL 片段 -->
    </otherwise>
</choose>

使用示例

假設(shè)需要根據(jù)不同的查詢(xún)條件動(dòng)態(tài)生成 SQL:

<select id="findActiveBlogLike" resultType="Blog">
    SELECT * FROM BLOG WHERE state = 'ACTIVE'
    <choose>
        <when test="title != null">
            AND title like #{title}
        </when>
        <when test="author != null and author.name != null">
            AND author_name like #{author.name}
        </when>
        <otherwise>
            AND featured = 1
        </otherwise>
    </choose>
</select>

工作原理

  1. 按照 <when> 標(biāo)簽的順序依次判斷條件表達(dá)式
  2. 當(dāng)某個(gè) <when>test 條件為 true 時(shí),會(huì)執(zhí)行對(duì)應(yīng)的 SQL 片段
  3. 如果所有 <when> 條件都不滿足,則執(zhí)行 <otherwise> 中的 SQL
  4. 如果沒(méi)有 <otherwise> 且所有條件都不滿足,則不插入任何 SQL

注意事項(xiàng)

  • 每個(gè) <when> 標(biāo)簽的 test 屬性值是 OGNL 表達(dá)式
  • 可以使用復(fù)雜的條件判斷,包括邏輯運(yùn)算符和對(duì)象屬性訪問(wèn)
  • 只會(huì)選擇第一個(gè)滿足條件的 <when> 分支執(zhí)行
  • <otherwise> 是可選的,不是必須的

與 if 標(biāo)簽的區(qū)別

<if> 標(biāo)簽會(huì)檢查所有滿足條件的片段并拼接,而 <choose> 只會(huì)選擇第一個(gè)滿足條件的片段執(zhí)行。例如:

<!-- if 標(biāo)簽示例:可能拼接多個(gè)條件 -->
<if test="title != null">AND title = #{title}</if>
<if test="author != null">AND author = #{author}</if>

<!-- choose 標(biāo)簽示例:只選擇第一個(gè)滿足的條件 -->
<choose>
    <when test="title != null">AND title = #{title}</when>
    <when test="author != null">AND author = #{author}</when>
</choose>

實(shí)際應(yīng)用場(chǎng)景

  1. 多條件優(yōu)先級(jí)查詢(xún)
  2. 根據(jù)不同參數(shù)值選擇不同的排序方式
  3. 實(shí)現(xiàn)類(lèi)似枚舉值的條件分支
  4. 處理復(fù)雜的業(yè)務(wù)邏輯分支

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 簡(jiǎn)單說(shuō)說(shuō)Java SE、Java EE、Java ME三者之間的區(qū)別

    簡(jiǎn)單說(shuō)說(shuō)Java SE、Java EE、Java ME三者之間的區(qū)別

    本篇文章小編就為大家簡(jiǎn)單說(shuō)說(shuō)Java SE、Java EE、Java ME三者之間的區(qū)別。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • Spring Boot Web 開(kāi)發(fā)注解篇

    Spring Boot Web 開(kāi)發(fā)注解篇

    在 Spring Boot 快速入門(mén)中,只要在 pom.xml 加入了 spring-boot-starter-web 依賴(lài),即可快速開(kāi)發(fā) web 應(yīng)用。下文給大家詳細(xì)介紹了spring boot web 開(kāi)發(fā)注解,感興趣的朋友參考下吧
    2017-08-08
  • Reactive Programming入門(mén)概念詳解

    Reactive Programming入門(mén)概念詳解

    這篇文章主要為大家介紹了Reactive Programming入門(mén)概念詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • 手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟

    這篇文章主要介紹了手把手教你搭建第一個(gè)Spring Batch項(xiàng)目的步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Java中的Optional處理方法

    Java中的Optional處理方法

    在我們?nèi)粘5拈_(kāi)發(fā)中,我們經(jīng)常會(huì)遇到?NullPointerException,如何才能優(yōu)雅的處理NPE?這里告訴大家一個(gè)較為流行的方法,這篇文章主要介紹了Java中的Optional處理方法,需要的朋友可以參考下
    2022-09-09
  • SpringBoot實(shí)現(xiàn)接口防刷的五種方案

    SpringBoot實(shí)現(xiàn)接口防刷的五種方案

    接口防刷是保障系統(tǒng)安全與穩(wěn)定性的重要措施,惡意的高頻請(qǐng)求不僅會(huì)消耗服務(wù)器資源,還可能導(dǎo)致數(shù)據(jù)異常,甚至系統(tǒng)癱瘓,本文將介紹在SpringBoot框架下實(shí)現(xiàn)接口防刷的5種技術(shù)方案,需要的朋友可以參考下
    2025-04-04
  • Java的類(lèi)型擦除式泛型詳解

    Java的類(lèi)型擦除式泛型詳解

    Java語(yǔ)言中的泛型只存在于程序源碼之中,在編譯后的字節(jié)碼文件里,則全部泛型都會(huì)被替換為原來(lái)的原始類(lèi)型(Raw Type),并且會(huì)在相應(yīng)的地方插入強(qiáng)制轉(zhuǎn)型的代碼。這篇文章主要介紹了Java的類(lèi)型擦除式泛型,需要的朋友可以參考下
    2021-08-08
  • SpringBoot 如何根據(jù)不同profile選擇不同配置

    SpringBoot 如何根據(jù)不同profile選擇不同配置

    這篇文章主要介紹了SpringBoot 如何根據(jù)不同profile選擇不同配置的操作方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • JSP安全開(kāi)發(fā)之XSS漏洞詳解

    JSP安全開(kāi)發(fā)之XSS漏洞詳解

    XSS又叫CSS (Cross Site Script) ,跨站腳本攻擊。它指的是惡意攻擊者往Web頁(yè)面里插入惡意腳本代碼,而程序?qū)τ谟脩糨斎雰?nèi)容未過(guò)濾,當(dāng)用戶瀏覽該頁(yè)之時(shí),嵌入其中Web里面的腳本代碼會(huì)被執(zhí)行,從而達(dá)到惡意攻擊用戶的特殊目的。
    2016-09-09
  • 關(guān)于Java中數(shù)組切片的幾種方法(獲取數(shù)組元素)

    關(guān)于Java中數(shù)組切片的幾種方法(獲取數(shù)組元素)

    這篇文章主要介紹了關(guān)于Java中數(shù)組切片的幾種方法(獲取數(shù)組元素),切片是數(shù)組的一個(gè)引用,因此切片是引用類(lèi)型,在進(jìn)行傳遞時(shí),遵守引用傳遞的機(jī)制,需要的朋友可以參考下
    2023-05-05

最新評(píng)論