好程式設計師Java分享Mybatis必會的動態SQL
好程式設計師 Java 分享 Mybatis 必會的動態 SQL , 前言 :
Mybatis 可謂是 java 開發者必須會的一項技能。 MyBatis 的強大特性之一便是它的動態 SQL 。如果你有使用 JDBC 或其它類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句的痛苦。例如拼接時要確保不能忘記新增必要的空格,還要注意去掉列表最後一個列名的逗號。利用動態 SQL 這一特性可以徹底擺脫這種痛苦。
M ybatis 動態 sql
mybatis 動態SQL,透過 if, choose, when, otherwise, trim, where, set, foreach等標籤,可組合成非常靈活的SQL語句,從而在提高 SQL 語句的準確性的同時,也大大提高了開發人員的效率。本文主要介紹這幾個動態SQL .
具體示例
if標籤 if就是用來對輸入對映的欄位進行判斷 一般是非空判斷 null 和""。
1. <!-- 案例 1 :動態 sql 之 if -->
2. <select id = "selectUsersIf" parameterType = "user" resultType = "user" >
3. select * from users where 1 =1
4. <if test = "uname!=null and uname!=''" > and uname like "%"#{uname}"%" </if>
5. <if test = "sex!=null and sex!=''" > and sex = #{sex} </if>
6. </select>
動態 SQL <where /> 相當於 where 關鍵字 <where /> 可以自動處理第一個前 and 或者 or 。 當條件都沒有的時候 where 也不會加上 。
1. <!-- 案例 2 :動態 sql 之 where 可以自動處理第一個前 and 或者 or 。當條件都沒有的時候 where 也不會加上 -->
2. <select id = "selectUsersWhere" parameterType = "user" resultType = "user" >
3. select * from users
4. <where>
5. <if test = "uname!=null and uname!=''" > and uname like "%"#{uname}"%" </if>
6. <if test = "sex!=null and sex!=''" > and sex = #{sex} </if>
7. </where>
choose — when--when--otherwise when 可以多個 otherwise 只能有一個 類似於 switch case 。
需求:輸入使用者 id 按照使用者 id 進行精確查詢 其他條件不看 沒有輸入 id 使用者名稱模糊查詢 都沒有的話 查詢 id=1 的使用者
1. <!-- 案例 3 :動態 sql 之 choose—when when otherwise -->
2.
3. <select id = "selectUsersChoose" parameterType = "user" resultType = "user" >
4. select * from users
5. <where>
6. <choose>
7. <when test = "uid!=null" > uid =#{uid} </when>
8. <when test = "uname!=null and uname!=''" > uname like "%"#{uname}"%" </when>
9. <otherwise> uid = 1 </otherwise>
10.
11. </choose>
12. </where>
13. </select>
動態 sql 之 set 代替 set 關鍵字 set 標籤可以幫助我們去掉最後一個逗號
1. <update id = "updateSet" parameterType = "user" >
2.
3. update users
4.
5. <set>
6. <if test = "uname!=null and uname!=''" > uname =#{uname}, </if>
7. <if test = "upwd!=null and upwd!=''" > upwd =#{upwd}, </if>
8. <if test = "sex!=null and sex!=''" > sex =#{sex}, </if>
9. <if test = "birthday!=null" > birthday =#{birthday}, </if>
10. </set>
11. where uid =#{uid}
12. </update>
Trim , trim 代替 where
1. <!-- 案例 5 :動態 sql 之 trim 代替 where -->
2. <select id = "selectUsersTrimWhere" parameterType = "user" resultType = "user" >
3. select * from users
4. <!--
5. prefix: 指新增字首修飾
6. suffix: 新增字尾修飾
7. prefixOverrides :去掉字首修飾
8. suffixOverrides :去掉字尾修飾
9. -- >
10. < trim prefix = "where" prefixOverrides = "and|or" >
11. <if test = "uname!=null and uname!=''" > and uname like "%"#{uname}"%" </if>
12. <if test = "sex!=null and sex!=''" > and sex = #{sex} </if>
13. </trim>
14. </select>
Trim 代替 set :
1. <!-- 案例 6 :動態 sql 之 trim 代替 set -->
2. <update id = "updateTrimSet" parameterType = "user" >
3.
4. update users
5.
6. <trim prefix = "set" suffixOverrides = "," suffix = "where uid=#{uid}" >
7. <if test = "uname!=null and uname!=''" > uname =#{uname}, </if>
8. <if test = "upwd!=null and upwd!=''" > upwd =#{upwd}, </if>
9. <if test = "sex!=null and sex!=''" > sex =#{sex}, </if>
10. <if test = "birthday!=null" > birthday =#{birthday}, </if>
11. </trim>
12.
F oreach 來遍歷集合
1. <!-- 案例 7: 動態 sql 之 foreach 遍歷陣列 -->
2. <select id = "selectUsersForeachArray" resultType = "user" >
3. select * from users where uid in
4. <!--
5. collection: 要遍歷的集合
6. item: 當前正在遍歷的物件的變數名
7. open: 開始遍歷
8. close: 結束便利
9. index: 下標
10. separator: 分割
11. -- >
12. <foreach collection = "array" item = "item" open = "(" close = ")" index = "index" separator = "," >
13. #{item}
14. </foreach>
15.
16. </select>
總結
熟練掌握以上 Mysql 的動態 SQL , 我們可以更得心應手的完成我的功能,寫更少的程式碼,實現更多的功能。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913892/viewspace-2647887/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師分享MyBatis之動態SQL語句程式設計師MyBatisSQL
- 好程式設計師Java分享SQL語言之索引程式設計師JavaSQL索引
- 好程式設計師Java教程分享MyBatis Plus介紹程式設計師JavaMyBatis
- 好程式設計師Java分享MySQL之SQL入門(一)程式設計師JavaMySql
- 好程式設計師Java學習路線分享mybatis對映程式設計師JavaMyBatis
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師Java培訓分享Java動態代理機制詳解程式設計師Java
- 好程式設計師Java培訓分享Java初學者必讀程式設計師Java
- 好程式設計師Java學習路線分享MyBatis之Spring整合程式設計師JavaMyBatisSpring
- 好程式設計師Java學習路線分享MyBatis之基本使用程式設計師JavaMyBatis
- 好程式設計師Java培訓Java程式設計師必學技術程式設計師Java
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師Java教程分享Nginx靜態資源部署程式設計師JavaNginx
- 好程式設計師Java培訓分享Java程式設計師技能提升指南程式設計師Java
- 好程式設計師Java培訓分享Java程式設計師常用的工具類庫程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -啟動流程程式設計師JavaSpring Boot
- 好程式設計師Java教程分享Java語法程式設計師Java
- 好程式設計師Java教程分享List介面程式設計師Java
- 好程式設計師Java教程分享javaweb框架程式設計師JavaWeb框架
- 好程式設計師Java學習路線分享MyBatis之關聯查詢程式設計師JavaMyBatis
- 好程式設計師Java教程Java動態代理機制詳解程式設計師Java
- 好程式設計師Java培訓分享BigDecimal的用法程式設計師JavaDecimal
- 好程式設計師Java培訓分享20個Java程式設計師基礎題程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -自動配置原理程式設計師JavaSpring Boot
- 好程式設計師Java教程分享Java面試妙招程式設計師Java面試
- 好程式設計師Java教程分享Java開發工具程式設計師Java
- 好程式設計師Java教程分享SQL資料庫不同的最佳化方法程式設計師JavaSQL資料庫
- 好程式設計師Java教程分享Java中this的幾種用法程式設計師Java
- 好程式設計師Java教程分享幾個流行的Java框架程式設計師Java框架
- 好程式設計師Java培訓分享如何快速入門Java程式設計程式設計師Java
- 好程式設計師Java培訓分享SpringBoot -YAML程式設計師JavaSpring BootYAML
- 好程式設計師java分享spring框架精講程式設計師JavaSpring框架
- Android程式設計師必會技能---執行時動態生成類---之動態代理Android程式設計師
- Android程式設計師必會技能—執行時動態生成類—之動態代理Android程式設計師
- 學習MyBatis必知必會(7)~註解開發、動態SQLMyBatisSQL
- 好程式設計師Python培訓分享入門必會的3款程式碼編輯器程式設計師Python
- 好程式設計師雲端計算培訓分享雲端計算必會的Docker容器命令程式設計師Docker