国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

優(yōu)化MyBatis查詢條件:從Boolean類型判斷到<choose>標簽的進化

這篇具有很好參考價值的文章主要介紹了優(yōu)化MyBatis查詢條件:從Boolean類型判斷到<choose>標簽的進化。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

需求背景

作為一名Java CRUD Coder,日常開發(fā)中會遇到類似的需求:通過下拉列表選擇“是”或“否”來對數(shù)據(jù)庫中的數(shù)據(jù)進行篩選。如果此時前端的傳參是boolean類型的truefalse,后端Mapper層的代碼可能會遇到需要構造類似if (param.existFlag) and table.id not in (xxxx1,xxxx2)這樣的條件查詢,如果你們的ORM框架使用的是MyBatis/MyBatis Plus,請看下文內容。

MyBatis參數(shù)映射

錯誤寫法

Java中在寫判斷條件時,可以使用:

if(existFlag) {
    //do something
}

在MyBatis的XML中,不可以使用類似的寫法:

<if test="param.existFlag">
  AND id = 1
</if>

正確寫法

<if test="param.existFlag != null and param.existFlag == true">
  AND id = 1
</if>

注意事項及優(yōu)化

缺陷

當我們需要在SQL中需要根據(jù)true、false、null執(zhí)行不同的邏輯時,盡管MyBatis支持上述寫法,但這種寫法難免不太容易理解。

<select id="selectUsersByFlag" resultType="User">
    SELECT * FROM users
    <where>
        <if test="existFlag != null and existFlag == true">
            AND id = 1
        </if>
        <if test="existFlag != null and existFlag == false">
            AND id = 2
        </if>
        <if test="existFlag == null">
            -- 處理字段為null的情況,此處略
        </if>
    </where>
</select>

既然true、false都需要判斷,那么這種寫法就相當于:

if (existFlag) {
    // do something 1
} else if (!existFalg){
    //do something 2
} else {
    //do something 3
}

當if條件變得更多時,代碼的邏輯結構顯然會變得更臃腫,不易理解。那么我們需要再優(yōu)化一下。

優(yōu)化

在Java中,當判斷條件變多時,可以使用switch語句、策略模式等方案優(yōu)化,那么在MyBatis中可以使用<choose>進行優(yōu)化。

MyBatis中的<choose>標簽用于在多個條件中選擇第一個滿足條件的子句。類似于Java中的switch語句,<choose>標簽可以根據(jù)不同的條件選擇執(zhí)行不同的SQL子句,提高SQL語句的靈活性和可讀性。

以上代碼可以優(yōu)化為:

<select id="selectUsersByFlag" resultType="User">
  SELECT * FROM users
  <where>
    <choose>
      <when test="existFlag != null and existFlag == true">
        AND id = 1
      </when>
      <when test="existFlag != null and existFlag == false">
        AND id = 2
      </when>
      <otherwise>
        and id = 3
      </otherwise>
    </choose>
  </where>
</select>

同樣,也可以使用case、when優(yōu)化:

SELECT *
FROM users
WHERE
CASE
WHEN existFlag = true THEN id = 1
WHEN existFlag = false THEN id = 2
ELSE
END

寫到最后的一點想法

作為一名程序員,我們的代碼首先要保證功能可用,在功能可用的前提下,要保證代碼質量可讀性、安全、性能等。吾日三省吾身,多思考一下代碼如何能寫的更好,這要求我們需要不斷探索代碼的最佳實踐。

保持持續(xù)學習的態(tài)度,每天優(yōu)化一點點,一點點改進,從而寫出更加優(yōu)雅、高效和安全的代碼。

后續(xù)內容文章持續(xù)更新中…

近期發(fā)布。


關于我

????你好,我是Debug.c。微信公眾號:種棵代碼技術樹 的維護者,一個跨專業(yè)自學Java,對技術保持熱愛的bug猿,同樣也是在某二線城市打拼四年余的Java Coder。

??在掘金、CSDN、公眾號我將分享我最近學習的內容、踩過的坑以及自己對技術的理解。

??如果您對我感興趣,請聯(lián)系我。

若有收獲,就點個贊吧,喜歡原圖請私信我。

優(yōu)化MyBatis查詢條件:從Boolean類型判斷到<choose>標簽的進化,思考,MySQL,mybatis文章來源地址http://www.zghlxwxcb.cn/news/detail-826744.html

到了這里,關于優(yōu)化MyBatis查詢條件:從Boolean類型判斷到<choose>標簽的進化的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 在Mybatis中寫動態(tài)sql這些標簽:if、where、set、trim、foreach、choose的作用是什么,怎么用?

    在 MyBatis 中,您可以使用動態(tài) SQL 標簽來構建靈活的 SQL 查詢,以根據(jù)不同的條件生成不同的查詢語句。以下是這些標簽的作用和用法: 1. **`if` 標簽:** 用于根據(jù)某個條件動態(tài)地包含或排除 SQL 片段,test:可以寫條件。 ? ?示例用法: ? ? ? ?```xml ? ?select id=\\\"getUserList\\\" param

    2024年02月11日
    瀏覽(38)
  • Mybatis mapper.xml 判斷條件寫法注意

    1.判斷String是否為空 if?test=\\\"stringParam != null and?stringParam?!= \\\'\\\'\\\"/if 2.判斷Integer是否大于0 判斷等于? when test=\\\"item.mark == 1\\\"\\\" 3.判斷List是否不為空 5.判斷字符串是否等于特定字符(比如此處的user)

    2024年02月16日
    瀏覽(32)
  • mybatis <if>標簽判斷“0“不生效

    原if標簽寫法 這種情況不生效,原因是mybatis是用OGNL表達式來解析的,在OGNL的表達式中,\\\'0’會被解析成字符(而我傳入的type卻是string),java是強類型的,char 和 一個string 會導致不等,所以if標簽中的sql不會被解析。? 解決方法 參考地址:mybatis <if>標簽判斷不生效_通域的博客

    2024年02月10日
    瀏覽(19)
  • Mybatis-puls——條件查詢的三種格式+條件查詢null判定+查詢投影

    Mybatis-puls——條件查詢的三種格式+條件查詢null判定+查詢投影

    在mybatis_plus的封裝中的WrapperT接口參數(shù)就是用于封裝查詢條件? ?在測試類中啟動如上一個簡單的查詢,然后控制臺運行會輸出一大堆無關日志,這里先把這些日志關閉 先新建一個XML配置文件? ?然后變成如下,這里configuration標簽里面什么都沒有配置就是取消所有日志文件了

    2024年01月18日
    瀏覽(27)
  • Mybatis Plus之DQL(條件查詢方式、查詢投影、查詢條件設定、字段映射與表名映射)

    Mybatis Plus之DQL(條件查詢方式、查詢投影、查詢條件設定、字段映射與表名映射)

    增刪改查四個操作中,查詢是非常重要的也是非常復雜的操作,這塊需要我們重點學習下,這節(jié)我們主要學習的內容有: 條件查詢方式 查詢投影 查詢條件設定 字段映射與表名映射 1.1 條件查詢的類 MyBatisPlus將書寫復雜的SQL查詢條件進行了封裝,使用編程的形式完成查詢條件的

    2024年02月05日
    瀏覽(23)
  • Mybatis1.4 多條件查詢

    Mybatis1.4 多條件查詢

    我們經(jīng)常會遇到如上圖所示的多條件查詢,將多條件查詢的結果展示在下方的數(shù)據(jù)列表中。而我們做這個功能需要分析最終的SQL語句應該是什么樣,思考兩個問題 條件表達式 如何連接 條件字段 企業(yè)名稱 和 品牌名稱 需要進行模糊查詢,所以條件應該是: 簡單的分析后,我

    2024年02月10日
    瀏覽(46)
  • MyBatis-Plus條件查詢問題解決

    MyBatis-Plus條件查詢問題解決

    問題描述 系統(tǒng)中有用戶注冊的功能,但是會出現(xiàn)重復注冊的現(xiàn)象,代碼中有做過重復校驗,但是沒有生效。 問題解決 首先排查數(shù)據(jù)生成時間點不同,相差時間有長有短,不是用戶同時多次點擊的原因,應該是用戶這邊不同時間重復多次注冊導致的,但是程序中防止重復校驗

    2024年02月16日
    瀏覽(27)
  • MyBatis-Plus(三.Wrapper條件查詢)

    MyBatis-Plus(三.Wrapper條件查詢)

    Wrapper是Mybatis-plus中特有的 條件封裝接口 也就是把 查詢的條件 封裝到Wrapper實現(xiàn)類中 它的各個實現(xiàn)類有什么作用呢, 我覺得直接 顧名思義 吧? QueryWrapper(刪,查) 因為參數(shù)一般都從前端傳來的數(shù)據(jù)中得到, 所以必須用條件封裝的第一個參數(shù)確認它不為null UpdateWrapper(改) LambdaQuer

    2024年02月04日
    瀏覽(23)
  • mysql判斷查詢條件是否包含某字符串的7種方式

    like 也就是模糊查詢 如:select * from user where user_name \\\'%李%\\\' locate 判斷是否包含某字符串 如:select * from user where locate(\\\'李\\\',user_name)0 position 判斷是否包含某字符串 如:select * from user where position(\\\'李\\\' in user_name)0 instr 判斷是否包含某字符串 如:select * from user where instr(user_name,\\\'李\\\'

    2024年02月16日
    瀏覽(93)
  • WordPress主題開發(fā) — 模版循環(huán)(條件判斷、多個循環(huán)、新建查詢和文章循環(huán))

    ????????循環(huán)是 WordPress 通過主題模板文件輸出文章的默認機制?。在循環(huán)中,WordPress 遍歷當前頁面獲取到的所有文章,然后使用主題中的模版標簽將其格式化并輸出。 我們可以用 WordPress 循環(huán)來做很多事情,例如: 在網(wǎng)站首頁顯示多個文章模塊 在文章詳情頁面顯示內容

    2024年02月13日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包