sql where后面添加多個if判斷


1.情景展示

  有時候,我們需添加動態where條件,也就是多個if條件判斷,如何實現?

  動態SQL還是很常見的,這里分情況說明

2.mybatis

  mybatis的用法相對簡單,是我們經常會用到的

  直接使用<if test=""></if>標簽搞定即可

2.mysql

  動態where條件,通常會在存儲過程中使用

  通過if()函數實現,使用的關鍵點在於:1=1,當條件不成立時,執行的是:and 1=1,1=1永遠成立,所以不影響其他限制條件的執行

3.oracle

  上面同樣可以也能在oracle中通過decode()函數實現

  關鍵點在於:變量為空的時候,自己=自己,否則的話變量和它作對比。

  mysql和oracle的難點在於:想不到原來還可以這樣使用。 

updateTime--2021年10月28日11:25:29

4.關於mybatis的補充

  評論區的園友提出的意見很好,這里對mybatis標簽的運用,進行一下補充說明。

  第一,where條件后面的動態SQL語句,有兩種使用方式。

  情形1:where后面的第一個條件是必須存在的,后面的限制條件可有可無

  實現方式一:

  使用<if></if>標簽

where NAME = #{name}
<if test="age != null and age != ''">
    and AGE = #{age}
</if>

  實現方式二:

  使用<where><if></if></where>標簽

<where>
    <if test="name != null and name != ''">
        and NAME = #{name}
    </if>
    <if test="age != null and age != ''">
        and AGE = #{age}
    </if>
</where>

  反正name是非空的,就算加上非空判斷也是可行。  

  情形2:where條件后面的條件,都是可有可無的

  實現方式一:

  使用<if></if>標簽

where 1=1
<if test="name != null and name != ''">
    and NAME = #{name}
</if>
<if test="age != null and age != ''">
    and AGE = #{age}
</if>

  實現方式二:

  使用<where><if></if></where>標簽

<where>
    <if test="name != null and name != ''">
        NAME = #{name}
    </if>
    <if test="age != null and age != ''">
        and AGE = #{age}
    </if>
</where>

  <where>和<if>組合語法說明:

  where 元素只有在1個以上的IF條件成立的情況下才會插入“WHERE”子句(當IF條件都不成立時,SQL語句末尾不會有where);   

  若where后面第一個IF條件成立,且前面帶有AND關鍵詞時,會自動將其過濾掉。

  其它語法說明:

  IF條件的test表達式中的and、or不能用&&、 ||代替,如果非要使用,需要轉義;

  如果等式(=)左側是動態字段(變量)的話,正確使用方式為:${變量名},例如:${name}。

寫在最后

  哪位大佬如若發現文章存在紕漏之處或需要補充更多內容,歡迎留言!!!

 相關推薦:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM