Mybatics動態sql
Mybatics動態sql
if語句
只有滿足在test中的條件的情況下,才會在查詢條件中加入if標籤內的內容
<select id="findActiveBlogWithTitleLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE state = ‘ACTIVE’
<if test="title != null">
AND title like #{title}
</if>
</select>
test中需要包含兩個條件的情況下(直接使用and)
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
choose、when、otherwise
想從多個條件中選擇一個使用。針對這種情況,MyBatis 提供了 choose 元素,類似Java 中的 switch 語句:
<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 != null">
AND author_name like #{author.name}
</when>
<otherwise>
AND featured = 1
</otherwise>
</choose>
</select>
這裡的when相當於case語句,otherwise就相當於switch中的default語句。
trim
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
</select>
這種情況下一旦遇到第一個條件不滿足,下面某個條件滿足就會出現查詢條件第一個子條件出現and字首:如:
SELECT * FROM BLOG
WHERE
AND title like ‘someTitle’
這樣的語句很明顯會造成程式執行錯誤。
這時就可以使用trim標籤,將上述程式碼改為:
<select id="findActiveBlogLike"
resultType="Blog">
SELECT * FROM BLOG
WHERE
**<trim prefix="WHERE" prefixoverride="AND |OR">**
<if test="state != null">
state = #{state}
</if>
<if test="title != null">
AND title like #{title}
</if>
<if test="author != null and author.name != null">
AND author_name like #{author.name}
</if>
**</trim>**
</select>
prefix:字首
prefixoverride:去掉第一個and或者是or
有了這個標籤,就很容易解決了子條件出現字首的問題
foreach
<delete id="deleteBatch">
delete from user where id in
<foreach collection="array" item="id" index="index" open="(" close=")" separator=",">
#{id}
</foreach>
</delete>
假如 ids = {1,2,3,4,5}
這裡的sql就相當於:
delete form user where id in (1,2,3,4,5)
相關文章
- MyBatis 動態 SQLMyBatisSQL
- MybBatis動態SQLBATSQL
- mybatis動態SQLMyBatisSQL
- MyBatis(七) 動態SQLMyBatisSQL
- 1 Mybatis動態SQLMyBatisSQL
- Mybatis--動態SQLMyBatisSQL
- mybatis動態sql總結MyBatisSQL
- Mybatis-06 動態SqlMyBatisSQL
- MyBatis框架之SQL對映和動態SQLMyBatis框架SQL
- MyBatis對動態SQL的支援MyBatisSQL
- mybatis動態sql與分頁MyBatisSQL
- Java-Mybatis動態SQL整理JavaMyBatisSQL
- Gbase 8s 動態 SQLSQL
- Mybatis介紹之 動態SQLMyBatisSQL
- APEX 通過PL/SQL動態展示區域中動態內容SQL
- 動態SQL-條件分頁SQL
- 動態 SQL 和快取機制SQL快取
- Mybatis 動態執行SQL語句MyBatisSQL
- day06-動態SQL語句SQL
- 【SQL】Oracle避免動態SQL,提高過程執行效率SQLOracle
- 介面的繫結方案和動態SQLSQL
- hive Sql的動態分割槽問題HiveSQL
- Myabtis動態SQL,你真的會了嗎?SQL
- 【MyBatis學習總結 (五),動態SQL】MyBatisSQL
- PHP--動態生成sql查詢表格PHPSQL
- Mybatis where 1=1 動態sql問題MyBatisSQL
- MyBatis 動態 SQL 最全教程,這樣寫 SQL 太優雅了!MyBatisSQL
- SQL 如何實現動態的行列轉置SQL
- GaussDB資料庫SQL系列-動態語句資料庫SQL
- Mybatis 裡對映檔案的動態 SQL 語句,實現if,where,foreache的SQL語句動態拼接查詢MyBatisSQL
- MyBatis標籤實現的動態SQL語句MyBatisSQL
- BIRT 中如何根據引數動態拼接 SQLSQL
- PL/SQL中動態掉用儲存過程SQL儲存過程
- 一句SQL完成動態分級查詢SQL
- Mybatis(一)Porxy動態代理和sql解析替換MyBatisSQL
- 例項詳解如何構建動態SQL語句SQL
- MySQL儲存過程裡動態SQL的使用UXMySql儲存過程UX
- 關於IDEA使用xml實現動態sql的問題IdeaXMLSQL