您好,登錄后才能下訂單哦!
好程序員 Java 分享 Mybatis 必會的動態 SQL , 前言 :
Mybatis 可謂是 java 開發者必須會的一項技能。 MyBatis 的強大特性之一便是它的動態 SQL 。如果你有使用 JDBC 或其它類似框架的經驗,你就能體會到根據不同條件拼接 SQL 語句的痛苦。例如拼接時要確保不能忘記添加必要的空格,還要注意去掉列表最后一個列名的逗號。利用動態 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 , 我們可以更得心應手的完成我的功能,寫更少的代碼,實現更多的功能。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。