Myabtis動態SQL,你真的會了嗎?
阿新 • • 發佈:2020-09-06
### 目錄
- 前言
- 什麼是動態SQL?
- 常用的標籤
- if
- choose、when、otherwise
- where
- foreach
- set
- sql
- include
- 總結
- 拓展一下
- Mybatis中如何避免魔數?
- 如何引用其他XML中的SQL片段?
- 總結
## 前言
- 通過前兩篇的文章我們瞭解了Mybatis基本的CRUD操作、一些基本標籤的屬性以及如何對映結果,感興趣的可以看我的前兩篇文章,分別是**Mybatis入門之基礎操作**和**Mybatis結果對映,你射準了嗎?**,如果有什麼疑問的地方可以在文章下方留言,作者統一回復。
- 這篇文章就來聊一聊Mybatis的動態SQL,在實際的開發中Mybatis的這項功能是非常重要的,至於什麼是動態SQL?如何實現動態SQL?下面文章將會詳細介紹。
## 什麼是動態SQL?
- 動態 SQL 是 MyBatis 的強大特性之一。顧名思義,就是會動的SQL,即是能夠靈活的根據某種條件拼接出完整的SQL語句。這種類似於MySQL中的`case when then else then end....`這種語法,能夠根據某種條件動態的拼接出需要的SQL。
- 至於Mybatis如何實現動態SQL呢,Mybatis提供了非常多的標籤,能夠讓我們在XML檔案中靈活的運用這些標籤達到拼接SQL的目的。
## 常用的標籤
- Mybatis為了能夠讓開發者靈活的寫SQL也是費了一番功夫,定義了很多的標籤和語法,下面將會一一介紹。
### if
- 雖然英文不太好,但是在這麼簡單的不會不知道是`如果`的意思吧,Java語法中也有,只有判斷條件為`true`才會執行其中的SQL語句。
- 舉個栗子:HIS系統中醫護人員需要根據特定條件篩選患者,比如住院號,床位,性別等。當然這些條件並不是必填的,具體的功能截圖如下:
![](https://gitee.com/chenjiabing666/Blog-file/raw/master/Mybatis-%E5%8A%A8%E6%80%81SQL/1.png)
- 以上截圖中的條件篩選並不是必填的,因此我們不能在SQL中固定,要根據前端是否傳值來判斷是否需要加上這個條件。那麼此時查詢語句如何寫呢?如下:
```xml