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)
相關文章
- 動態SQLSQL
- 動態SQL intoSQL
- MyBatis 動態 SQLMyBatisSQL
- MybBatis動態SQLBATSQL
- ABAP 動態 SQLSQL
- Oracle 動態SQLOracleSQL
- mybatis動態SQLMyBatisSQL
- PLSQL Language Referenc-PL/SQL動態SQL-何時需要動態SQLSQL
- PL/SQL執行動態SQLSQL
- 1 Mybatis動態SQLMyBatisSQL
- Mybatis--動態SQLMyBatisSQL
- MyBatis(七) 動態SQLMyBatisSQL
- 避免動態SQL(二)SQL
- 避免動態SQL(一)SQL
- 動態sql 報表SQL
- PLSQL Language Referenc-PL/SQL動態SQL-本地動態SQL(EXECUTE IMMEDIATE語句)SQL
- PL/SQL 動態sql語句例SQL
- pl/sql--動態SQL常用方法SQL
- 動態sql和利用動態sql解決資料字典的讀取SQL
- mybatis動態sql總結MyBatisSQL
- Mybatis-06 動態SqlMyBatisSQL
- Mybatis 動態 SQL 詳解MyBatisSQL
- SqlServer中的動態SqlSQLServer
- Kettle實現動態SQLSQL
- SQL SERVER 動態查詢SQLServer
- MyBatis4:動態SQLMyBatisSQL
- 動態sql無法recoverSQL
- 用動態SQL語句SQL
- 動態SQL語句 (轉)SQL
- SQL Server動態SQL,繫結變數SQLServer變數
- 繫結變數在靜態sql和動態sql中變數SQL
- 動態SQL——構造通用動態頁面查詢SQL
- oracle procedure plsql 動態sql之動態傳遞表OracleSQL
- PLSQL Language Referenc-PL/SQL動態SQL-練習:在動態SQL塊中呼叫子程式。SQL
- MyBatis框架之SQL對映和動態SQLMyBatis框架SQL
- Mybatis介紹之 動態SQLMyBatisSQL
- Java-Mybatis動態SQL整理JavaMyBatisSQL
- MyBatis對動態SQL的支援MyBatisSQL