好程式設計師Java分享Mybatis必會的動態SQL

好程式設計師IT發表於2019-06-17

好程式設計師 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章