mybatis动态sql中的where标签的使用
From: https://blog.csdn.net/wobuaizhi/article/details/81874664
在使用mybatis的動態sql時,有時候遇到根據條件判斷添加where后面的篩選條件。
會出現多余的“and”或者“or”,如下:
??? <select id="findBlog"
???????? resultType="Blog">
????? SELECT * FROM BLOG
????? WHERE
????? <if test="state != null">
??????? state = #{state}
????? </if>
????? <if test="title != null">
??????? AND title like #{title}
????? </if>
??? </select>
如果第一個參數“state”為空,那么sql會變成下面這樣,
select * from blog where and title like
如果兩個if都為空,那么輸出為,
select * from blog where
顯然這樣的sql執行時,會發生錯誤。
這時候使用where標簽就可以解決這個問題,
??? <select id="findBlog"
???????? resultType="Blog">
????? SELECT * FROM BLOG
????? <where>
??????? <if test="state != null">
???????????? state = #{state}
??????? </if>
??????? <if test="title != null">
??????????? AND title like #{title}
??????? </if>
????? </where>
??? </select>
where 元素只會在至少有一個子元素的條件返回 SQL 子句的情況下才去插入“WHERE”子句。而且,若語句的開頭為“AND”或“OR”,where 元素也會將它們去除。
當然我們也可以用“trim”標簽來處理。
??? <trim prefix="WHERE" prefixOverrides="AND |OR ">
????? ...
??? </trim>
prefix:前綴, prefixoverride:去掉第一個“and”或者是“or”
“trim”標簽還有其他屬性,
suffixoverride:去掉最后標記的字符(就像是上面的and一樣)
suffix:后綴
?
參考文獻:http://www.mybatis.org/mybatis-3/zh/dynamic-sql.html
?
總結
以上是生活随笔為你收集整理的mybatis动态sql中的where标签的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 第一章 SQL命令 ALTER TABL
- 下一篇: 31个EMC标准电路分享