好程式設計師分享MyBatis之動態SQL語句
好程式設計師分享MyBatis 之動態 SQL 語句,我們在進行專案開發時,經常遇到需要根據不同的需求,對原有 SQL 語句的內容進行修改,原來這是一個比較頭疼的問題,因為需要對原有 SQL 語句進行拼接、重組,費時費力還容易出錯,今天我們將學習 MyBatis 的動態 SQL 功能,可以解決這個問題。
動態SQL 語句簡介
動態SQL 語句是 MyBatis 的一個非常強大的功能,允許我們根據不同的需求,組合出不同的 SQL 語句,在 select 、 update 、 insert 、 delete 標籤中都可以新增動態 SQL 語句。
IF 標籤
IF 標籤可以在條件成立時,在 SQL 語句中插入 IF 標籤中的內容,不成立就不插入
示例:
<select id="selectUserByUser" parameterType="User" resultMap="userMap">
select * from tb_user where
<if test="realname != null">
u_realname=#{realname}
</if>
<if test="gender != null">
and u_gender=#{gender}
</if>
</select>
上面程式碼中是按照User 物件的各個屬性進行查詢,如果姓名不為空就插入姓名作為條件,如果性別不為空就插入性別作為條件。
但是我們會發現如果姓名為空,性別不為空,SQL 語句就會變成: select * from tb_user where and u_gender=#{gender}
或者姓名、性別都為空就會變成:select * from tb_user where
這樣都會出現語法錯誤,這樣我們就需要下一個標籤:where
Where 標籤
Where 標籤 用於配置 where 條件,會去掉多餘的 and 或 or ,如果一個條件都不成立,會自動去掉 sql 中的 where 。
程式碼改為:
<select id="selectUserByUser" parameterType="User" resultMap="userMap">
select * from tb_user
<where>
<if test="realname != null">
u_realname=#{realname}
</if>
<if test="gender != null">
and u_gender=#{gender}
</if>
<if test="age != null">
and u_age=#{age}
</if>
</where>
</select>
這樣就不會出現上面可能的錯誤了
Trim 標籤
上面where 標籤的功能,也可以使用 trim 標籤實現, trim 能去掉多餘的字首和字尾。
語法:
<trim prefix=" 字首 SQL" suffix=" 字尾 " prefixOverrides=" 刪除前面的符號 " suffixOverrides=" 刪除後面的符號 ">
<if 標籤 >
</trim>
示例:
<trim prefix="where" prefixOverrides="and|or">
...
</trim>
Set 標籤
用於配置update 語句中的 set 部分,可以自動新增 set 關鍵字,刪除多餘的逗號
示例:
<update id="update" parameterType="User">
update tb_user
<set>
<if test="name != null">
u_name=#{name},
</if>
<if test="password != null">
u_password=#{password},
</if>
</set>
where u_id=#{id}
</update>
也可以使用trim 實現:
<trim prefix="set" suffixOverrides=",">
<if test="name != null">
u_name=#{name},
</if>
...
</trim>
Foreach 標籤
用於迴圈遍歷集合或陣列的值,如:按多個人姓名查詢
select * from tb_user where u_realname in (' 張三 ',' 李四 '....)
語法:
<foreach collection=" 集合名 " item=" 變數名 " index=" 下標名 " open=" 開始符號 " close=" 結束符號 " seperator=" 分割符號 ">
#{ 變數名 }
</foreach>
注意:集合名在Mapper 介面中需要使用 @Param 註解配置
示例:
<select id="selectUserByRealnames" resultMap="userMap">
select * from tb_user where u_realname in
<foreach collection="realnames" item="name" index="i" separator="," open="(" close=")">
#{name}
</foreach>
</select>
Choose 標籤
Java 中有 if ,也會有 if-else 、 switch 語句來判斷多個條件, MyBatis 也有 Choose 標籤可以進行多條件判斷
示例:
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG WHERE state = ‘ ACTIVE ’
<choose>
<when test="title != null">
AND title like #{title}
</when>
<when test="author != null">
AND author_name like #{author}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
這裡從第一個when 進行判斷,如果成立就插入條件,結束 choose 標籤,如果不成立再判斷下一個 when ,如果所有 when 都不成立,就插入 otherwise 中的語句。
總結
動態SQL 語句是 MyBatis 非常重要的特性,能夠讓我們根據不同需求組合 SQL 語句,而且不容易出錯。動態 SQL 的標籤有: if 、 where 、 set 、 choose 、 foreach 等。掌握好它們我們可以寫出更加靈活、高效的資料庫操作程式碼。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913864/viewspace-2705601/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java分享Mybatis必會的動態SQL程式設計師JavaMyBatisSQL
- MyBatis學習 之 三、動態SQL語句MyBatisSQL
- 好程式設計師Java分享SQL語言之索引程式設計師JavaSQL索引
- Mybatis 動態執行SQL語句MyBatisSQL
- 好程式設計師Java分享MySQL之SQL入門(一)程式設計師JavaMySql
- 好程式設計師Java學習路線分享MyBatis之基本使用程式設計師JavaMyBatis
- 好程式設計師Java教程分享MyBatis Plus介紹程式設計師JavaMyBatis
- 好程式設計師Java教程分享Java的兩種跳轉語句程式設計師Java
- 好程式設計師Java學習路線分享MyBatis之Spring整合程式設計師JavaMyBatisSpring
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- 好程式設計師Java培訓分享Mybatis面試題集合程式設計師JavaMyBatis面試題
- 好程式設計師Java學習路線分享MyBatis之關聯查詢程式設計師JavaMyBatis
- 好程式設計師Java教程分享Java語法程式設計師Java
- 好程式設計師Java教程分享Java之設計模式程式設計師Java設計模式
- 好程式設計師Java學習路線分享mybatis對映程式設計師JavaMyBatis
- 好程式設計師分享java設計模式之享元模式程式設計師Java設計模式
- 用動態SQL語句SQL
- 動態SQL語句 (轉)SQL
- 好程式設計師Python培訓分享函數語言程式設計之匿名函式程式設計師Python函數函式
- Mybatis 裡對映檔案的動態 SQL 語句,實現if,where,foreache的SQL語句動態拼接查詢MyBatisSQL
- 好程式設計師Java學習路線分享MyBatis之執行緒最佳化程式設計師JavaMyBatis執行緒
- 好程式設計師Java教程:SQL語言之檢視程式設計師JavaSQL
- 好程式設計師分享JavaScript之-文件物件模型(DOM)程式設計師JavaScript物件模型
- 好程式設計師分享Web前端知識之HTML程式設計師Web前端HTML
- 好程式設計師Java培訓分享Java動態代理機制詳解程式設計師Java
- PL/SQL 動態sql語句例SQL
- Mybatis連線池_動態sql語句_多表查詢實現MyBatisSQL
- 好程式設計師Python教程系列分享之Python語言元素之運算子程式設計師Python
- 好程式設計師Python教程系列分享之Python語言元素之變數程式設計師Python變數
- 好程式設計師Java教程分享Nginx靜態資源部署程式設計師JavaNginx
- 好程式設計師Java學習路線之Spring框架之動態代理程式設計師JavaSpring框架
- 好程式設計師分享DDL之運算元據庫程式設計師
- 好程式設計師Java分享SpringMVC之@ResponseBody註解程式設計師JavaSpringMVC
- Mybatis介紹之 動態SQLMyBatisSQL
- 好程式設計師web前端分享:如何理解web語義化?程式設計師Web前端
- 好程式設計師技術教程分享JavaScript運動框架程式設計師JavaScript框架
- 好程式設計師雲端計算教程分享Shell程式設計之for迴圈結構程式設計師
- Mybatis原始碼解析之執行SQL語句MyBatis原始碼SQL