溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

好程序員Java分享Mybatis必會(huì)的動(dòng)態(tài)SQL

發(fā)布時(shí)間:2020-08-08 21:33:47 來(lái)源:ITPUB博客 閱讀:142 作者:好程序員IT 欄目:編程語(yǔ)言

好程序員 Java 分享 Mybatis 必會(huì)的動(dòng)態(tài) SQL 前言

Mybatis 可謂是 java 開(kāi)發(fā)者必須會(huì)的一項(xiàng)技能。 MyBatis 的強(qiáng)大特性之一便是它的動(dòng)態(tài) SQL 。如果你有使用 JDBC 或其它類似框架的經(jīng)驗(yàn),你就能體會(huì)到根據(jù)不同條件拼接 SQL 語(yǔ)句的痛苦。例如拼接時(shí)要確保不能忘記添加必要的空格,還要注意去掉列表最后一個(gè)列名的逗號(hào)。利用動(dòng)態(tài) SQL 這一特性可以徹底擺脫這種痛苦。

M ybatis 動(dòng)態(tài) sql

mybatis 動(dòng)態(tài)SQL,通過(guò) if, choose, when, otherwise, trim, where, set, foreach等標(biāo)簽,可組合成非常靈活的SQL語(yǔ)句,從而在提高 SQL 語(yǔ)句的準(zhǔn)確性的同時(shí),也大大提高了開(kāi)發(fā)人員的效率。本文主要介紹這幾個(gè)動(dòng)態(tài)SQL .

具體示例

if標(biāo)簽 if就是用來(lái)對(duì)輸入映射的字段進(jìn)行判斷 一般是非空判斷 null 和""。

1.  <!--  案例 1 :動(dòng)態(tài) 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>   

動(dòng)態(tài) SQL <where /> 相當(dāng)于 where 關(guān)鍵字 <where /> 可以自動(dòng)處理第一個(gè)前 and 或者 or 。 當(dāng)條件都沒(méi)有的時(shí)候 where 也不會(huì)加上 。

1.  <!--  案例 2 :動(dòng)態(tài) sql where  可以自動(dòng)處理第一個(gè)前 and  或者 or 。當(dāng)條件都沒(méi)有的時(shí)候   where 也不會(huì)加上   -->   

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 可以多個(gè) otherwise 只能有一個(gè) 類似于 switch case 。

需求:輸入用戶 id 按照用戶 id 進(jìn)行精確查找  其他條件不看  沒(méi)有輸入   id   用戶名模糊查找 都沒(méi)有的話  查詢 id=1 的用戶

1.  <!--  案例 3 :動(dòng)態(tài) 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>

動(dòng)態(tài) sql set 代替 set 關(guān)鍵字 set 標(biāo)簽可以幫助我們?nèi)サ糇詈笠粋€(gè)逗號(hào)

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 :動(dòng)態(tài) 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 :動(dòng)態(tài) 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 來(lái)遍歷集合

1.  <!-- 案例 7: 動(dòng)態(tài) sql foreach    遍歷數(shù)組   -->   

2.  <select   id = "selectUsersForeachArray"    resultType = "user" >   

3.      select * from users  where uid  in    

4.      <!--   

5.          collection: 要遍歷的集合   

6.          item: 當(dāng)前正在遍歷的對(duì)象的變量名   

7.          open: 開(kāi)始遍歷   

8.          close: 結(jié)束便利   

9.          index: 下標(biāo)   

10.          separator: 分割   

11.       -- >   

12.       <foreach   collection = "array"   item = "item"   open = "("   close = ")"   index = "index"   separator = "," >   

13.          #{item}  

14.       </foreach>   

15.    

16.  </select>   

 

總結(jié)

熟練掌握以上 Mysql 的動(dòng)態(tài) SQL , 我們可以更得心應(yīng)手的完成我的功能,寫(xiě)更少的代碼,實(shí)現(xiàn)更多的功能。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI