- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) > 編程語(yǔ)言 >
- mybatis 為什么千萬(wàn)不要使用 where 1=1
下面是mybatis查詢(xún)語(yǔ)句,如果我們這次我們將 “state = ‘ACTIVE'” 設置成動(dòng)態(tài)條件,看看會(huì )發(fā)生什么。
<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>
如果沒(méi)有匹配的條件會(huì )怎么樣?最終這條 SQL 會(huì )變成這樣:
SELECT * FROM BLOG WHERE
這會(huì )導致查詢(xún)失敗。如果匹配的只是第二個(gè)條件又會(huì )怎樣?這條 SQL 會(huì )是這樣:
SELECT * FROM BLOG WHERE AND title like ‘someTitle'
這個(gè)查詢(xún)也會(huì )失敗。這個(gè)問(wèn)題不能簡(jiǎn)單地用條件元素來(lái)解決。這個(gè)問(wèn)題是如此的難以解決,以至于解決過(guò)的人不會(huì )再想碰到這種問(wèn)題。
MyBatis 有一個(gè)簡(jiǎn)單且適合大多數場(chǎng)景的解決辦法。而在其他場(chǎng)景中,可以對其進(jìn)行自定義以符合需求。而這,只需要一處簡(jiǎn)單的改動(dòng):
<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> </where> </select>
where 元素只會(huì )在子元素返回任何內容的情況下才插入 “WHERE” 子句。而且,若子句的開(kāi)頭為 “AND” 或 “OR”,where 元素也會(huì )將它們去除。
1.會(huì )導致表中的數據索引失效
2.垃圾條件,沒(méi)必要加
到此這篇關(guān)于mybatis 為什么千萬(wàn)不要使用 where 1=1的文章就介紹到這了,更多相關(guān)mybatis where1=1內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站