精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MyBatis 中為什么不建議使用 Where 1=1?

開發(fā) 前端
最近接手了一個(gè)老項(xiàng)目,“愉悅的心情”自然無以言表,做開發(fā)的朋友都懂,這里就不多說了,都是淚圖片...

[[434970]]

最近接手了一個(gè)老項(xiàng)目,“愉悅的心情”自然無以言表,做開發(fā)的朋友都懂,這里就不多說了,都是淚...

接手老項(xiàng)目,自然是要先熟悉一下業(yè)務(wù)代碼,然而在翻閱 mapper 文件時(shí),發(fā)現(xiàn)了一個(gè)比較詭異的事情。這里給出簡化后的業(yè)務(wù)代碼:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  3. <mapper namespace="com.example.demo.mapper.UserMapper"
  4.     <select id="list" resultType="com.example.demo.model.User"
  5.         select * from user 
  6.         where 1=1 
  7.         <if test="name!=null"
  8.             and name=#{name
  9.         </if> 
  10.         <if test="password!=null"
  11.             and password=#{password
  12.         </if> 
  13.     </select
  14. </mapper> 

 

機(jī)智的小伙伴可能已經(jīng)看出了問題,在眾多 mapper 中發(fā)現(xiàn)了一個(gè)相同的想象,幾乎所有的 mapper 中都包含了一個(gè)無用的拼接 SQL:where 1=1。作為一個(gè)幾乎有代碼潔癖癥的人,自然是忍不住動(dòng)手改造一番了。

錯(cuò)誤的改造方式

既然是去掉 where 1=1,那最簡單的方式就是將它直接從代碼中刪除了,如下代碼所示:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  3. <mapper namespace="com.example.demo.mapper.UserMapper"
  4.     <select id="list" resultType="com.example.demo.model.User"
  5.         select * from user 
  6.             where 
  7.             <if test="name!=null"
  8.                 name=#{name
  9.             </if> 
  10.             <if test="password!=null"
  11.                 and password=#{password
  12.             </if> 
  13.     </select
  14. </mapper> 

 

以上代碼刪除了 1=1,并且把第一個(gè) name 查詢中的 and 去掉了,以防 SQL 查詢報(bào)錯(cuò)。

但這樣就沒問題了嗎?我們直接來看結(jié)果,當(dāng)包含參數(shù) name 查詢時(shí),結(jié)果如下:

一切順理成章,完美的一塌糊涂。

然而,當(dāng)省略 name 參數(shù)時(shí)(因?yàn)?name 為非必要參數(shù),所以可以省略),竟然引發(fā)了以下異常:

又或者只有 password 查詢時(shí),結(jié)果也是一樣:

都是報(bào)錯(cuò)信息,那腫么辦呢?難不成把 1=1 恢復(fù)回去?

正確的改進(jìn)方式

其實(shí)不用,在 MyBatis 中早已經(jīng)想到了這個(gè)問題,我們可以將 SQL 中的 where 關(guān)鍵字換成 MyBatis 中的標(biāo)簽,并且給每個(gè)標(biāo)簽內(nèi)都加上 and 拼接符,這樣問題就解決了,如下代碼所示:

  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"
  3. <mapper namespace="com.example.demo.mapper.UserMapper"
  4.     <select id="list" resultType="com.example.demo.model.User"
  5.         select * from user 
  6.         <where
  7.             <if test="name!=null"
  8.                and name=#{name
  9.             </if> 
  10.             <if test="password!=null"
  11.                 and password=#{password
  12.             </if> 
  13.         </where
  14.     </select
  15. </mapper> 

代碼改造完成之后,接下來我們來測(cè)試一下所有的請(qǐng)求場(chǎng)景。

不傳任何參數(shù)的請(qǐng)求

此時(shí)我們可以不傳遞任何參數(shù)(查詢所有數(shù)據(jù)),如下圖所示:圖片生成的 SQL 語句如下:圖片

傳遞 1 個(gè)參數(shù)的請(qǐng)求

也可以傳遞 1 個(gè)參數(shù),根據(jù) name 進(jìn)行查詢,如下圖所示:圖片生成的 SQL 如下圖所示:圖片也可以只根據(jù) password 進(jìn)行查詢,如下圖所示:圖片生成的 SQL 如下圖所示:

傳遞 2 個(gè)參數(shù)的請(qǐng)求

也可以根據(jù) name 加 password 的方式進(jìn)行聯(lián)合查詢,如下圖所示:

生成的 SQL 如下圖所示:

用法解析

我們驚喜的發(fā)現(xiàn),在使用了標(biāo)簽之后,無論是任何查詢場(chǎng)景,傳一個(gè)或者傳多個(gè)參數(shù),或者直接不傳遞任何參數(shù),都可以輕松搞定。

首先,標(biāo)簽會(huì)判斷,如果沒有任何參數(shù),則不會(huì)在 SQL 語句中拼接 where 查詢,反之才會(huì)拼接 where 查詢;其次在查詢的標(biāo)簽中,每個(gè)標(biāo)簽都可以加 and 關(guān)鍵字,MyBatis 會(huì)自動(dòng)將第一個(gè)條件前面的 and 關(guān)鍵字刪除掉,從而不會(huì)導(dǎo)致 SQL 語法錯(cuò)誤,這一點(diǎn)官方文檔中也有說明,如下圖所示:

總結(jié)

在 MyBatis 中,建議盡量避免使用無意義的 SQL 拼接 where 1=1,我們可以使用標(biāo)簽來替代 where 1=1,這樣的寫既簡潔又優(yōu)雅,何樂而不為呢?

 

責(zé)任編輯:武曉燕 來源: Java中文社群
相關(guān)推薦

2024-02-20 22:13:49

SQL語句編程

2024-03-11 11:02:03

Date類JavaAPI

2020-12-01 09:55:48

M1芯片MacBook

2020-12-15 10:00:31

MySQL數(shù)據(jù)庫text

2010-09-08 15:51:53

SQL語句where

2025-09-15 01:50:00

2011-03-10 13:18:54

SQLwhere

2024-07-29 08:20:10

2020-11-17 09:01:09

MySQLDelete數(shù)據(jù)

2020-12-22 06:04:13

Python定時(shí)代碼

2020-12-24 18:46:11

Java序列化編程語言

2021-10-13 14:06:46

MySQLUtf8符號(hào)

2021-08-04 17:20:30

阿里巴巴AsyncJava

2020-04-01 17:50:02

Python編程語言

2020-06-23 14:09:49

枚舉JDK場(chǎng)景

2025-04-29 07:06:20

2024-02-28 07:37:53

JavaExecutors工具

2021-07-01 16:10:22

equals字符串Java

2021-01-26 21:00:24

SSL證書網(wǎng)絡(luò)安全加密

2022-02-06 10:58:37

Redis主從模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

综合视频在线| 免费观看性欧美大片无片| 国产亚洲福利社区一区| 成人国产精品一区| 久久久久噜噜噜亚洲熟女综合| 精品国产午夜肉伦伦影院| 色视频欧美一区二区三区| 2025韩国大尺度电影| 欧美 日韩 国产 成人 在线 91| 国产精品亚洲欧美| 俺也去精品视频在线观看| 最新版天堂资源在线| 天堂久久午夜av| 夜夜精品浪潮av一区二区三区| 欧美一区二区福利| a级片免费视频| 久久亚洲精品伦理| 九九精品视频在线观看| mm131美女视频| av日韩在线免费观看| 欧美日韩视频在线| 日本一本草久p| 国产尤物视频在线| 国产成人在线视频网站| 国产精品成人免费视频| 国产无遮挡裸体免费视频| 日韩欧美中文| 亚洲精品在线观看www| 欧美老女人bb| 中文成人在线| 欧美亚洲综合网| 每日在线更新av| 最新国产在线拍揄自揄视频| 中文字幕+乱码+中文字幕一区| 精品不卡一区二区三区| 精品人妻av一区二区三区| 日本午夜精品视频在线观看| 欧美一级电影久久| 亚洲激情视频一区| 午夜日韩av| 久久久97精品| 免费一级suv好看的国产网站 | 亚洲一区二区少妇| 最近中文在线观看| 三级久久三级久久| 日本人成精品视频在线| 天海翼一区二区| 亚洲视频观看| 欧美激情一级欧美精品| 欧美日韩三级在线观看 | 91影院在线观看| 成人免费看片网址| 亚洲不卡免费视频| 国产精品911| 97se视频在线观看| 亚洲av无码国产精品永久一区| 精品一区二区三区在线视频| 国产综合久久久久| 国产乱淫片视频| 国内成人精品2018免费看| 国产女同一区二区| 亚洲资源在线播放| 捆绑紧缚一区二区三区视频| 国产精品自产拍高潮在线观看| 波多野结衣视频在线观看| 老司机午夜精品视频| 日本精品性网站在线观看| 免费黄色网址在线| 久久久久久夜| 国产精品一区二区三区久久久| 中文字幕 欧美激情| 免费成人美女在线观看.| 国产精品一二三视频| 国产精品视频无码| 国产盗摄精品一区二区三区在线| 国产精品99久久久久久久| 日本毛片在线观看| 国产校园另类小说区| 亚洲一区二区在线观| 免费大片黄在线观看视频网站| 亚洲天堂av老司机| 久久成人福利视频| 免费日韩电影| 3751色影院一区二区三区| 国产精品19p| 欧美激情99| 中日韩午夜理伦电影免费| www日韩在线| 亚洲激情不卡| 国产精品视频区1| 国产三级按摩推拿按摩| jvid福利写真一区二区三区| 欧美一区二区福利| 在线播放蜜桃麻豆| 狠狠综合久久av一区二区小说| 日韩精品一区中文字幕| 国产激情综合| 日韩精品久久久久久福利| 五月激情四射婷婷| 激情视频一区二区三区| 日韩美女视频中文字幕| 国内精品国产成人国产三级| 91视频在线观看免费| 一区二区三区在线观看www| 黑人精品视频| 欧美视频一二三区| 国产黑丝一区二区| 国产精品二区不卡| 欧美一级视频免费在线观看| 一级全黄裸体免费视频| 91麻豆国产香蕉久久精品| 黄瓜视频免费观看在线观看www| 国产免费拔擦拔擦8x在线播放| 欧美午夜免费电影| 800av在线播放| 欧美肥老太太性生活| 57pao精品| 亚洲av无码国产精品永久一区| 国产女主播一区| 成人黄色av片| 日本免费一区二区三区视频| 国产亚洲xxx| 日本少妇在线观看| 国产一区二区按摩在线观看| 日韩欧美一区二区三区四区| brazzers在线观看| 日韩视频在线永久播放| 欧美人妻一区二区三区| 国产精品一二| 国产精品视频免费观看| a篇片在线观看网站| 欧美日韩在线一区二区| 亚洲最大成人网站| 日韩视频一区| 国产伦精品一区二区三区免| 91极品在线| 欧美精品一二三| 日韩一级片在线免费观看| 久久精品人人| 日本不卡一区| 在线免费日韩片| 日韩精品亚洲元码| 久久精品国产成人av| av一区二区三区黑人| 国产一区二区视频播放| 第一区第二区在线| 久久久久久久久久国产| 亚洲国产综合一区| 亚洲一区免费在线观看| 麻豆tv在线观看| 91欧美大片| 成人免费视频网址| 国产素人视频在线观看| 91精选在线观看| 五月天色婷婷丁香| 国产一区激情在线| 日韩久久久久久久久久久久| 免费欧美网站| 久久久久久久久久久免费精品 | 亚洲精品网站在线播放gif| 日韩成人av毛片| 91丨porny丨国产| 国内自拍视频一区| 日韩极品一区| 91在线视频九色| 国产羞羞视频在线播放| 亚洲二区中文字幕| 4438国产精品一区二区| 久久久国产精品不卡| av女优在线播放| 偷拍自拍一区| 国产精品极品尤物在线观看| 天堂а√在线资源在线| 欧美一区二区三区四区高清| 久久久国产精华液| 91免费精品国自产拍在线不卡| 黑鬼大战白妞高潮喷白浆| 欧美影院三区| 91视频最新| 三级中文字幕在线观看| 中文字幕亚洲欧美日韩在线不卡 | 成人黄色在线视频| 成人免费观看毛片| 久久资源中文字幕| 国产成人精品一区二区三区福利| 久久青草伊人| 深夜福利日韩在线看| 黄色小视频免费观看| 日韩欧美第一页| 欧美激情图片小说| 2023国产精品| 亚洲午夜精品一区| 99香蕉国产精品偷在线观看| 婷婷久久伊人| 国产成人澳门| 国产一区二区色| www成人免费观看| 色偷偷亚洲男人天堂| 免费观看国产精品| 欧美日韩和欧美的一区二区| 国产精彩视频在线| 国产精品欧美一区喷水| 精品影片一区二区入口| 蓝色福利精品导航| 无码人妻丰满熟妇区毛片18| 在线中文一区| 色一情一乱一伦一区二区三区| 免费精品一区二区三区在线观看| 日本午夜在线亚洲.国产| 宅男网站在线免费观看| 在线精品91av| 偷拍自拍在线| 精品日韩一区二区三区免费视频| 中文字幕天堂在线| 亚洲成人高清在线| 国产大学生自拍| 国产精品久久夜| 在线观看日本中文字幕| 成人久久视频在线观看| 四虎成人在线播放| 美腿丝袜亚洲综合| 亚洲熟妇av一区二区三区 | 大香煮伊手机一区| 精品福利av| 伊人久久在线观看| 91九色精品| 视频二区一区| 精品国产精品| 久久精品一区二区三区不卡免费视频 | 英国三级经典在线观看| 欧美日韩成人免费| 国产精品久久久久久福利| 一区三区二区视频| 国产中文字幕在线观看| 精品一区二区亚洲| 亚洲 精品 综合 精品 自拍| 欧美成人一区二区三区| 国产99对白在线播放| 欧美日本免费一区二区三区| 国产偷人爽久久久久久老妇app| 毛片在线网址| 国产aⅴ爽av久久久久成人| 国产一区二区三区四区在线观看| 欧美日韩在线免费播放| 国产精品一二| 哪个网站能看毛片| 亚洲一区免费| 久久精品国产精品亚洲色婷婷| 狠狠爱成人网| 91黄色在线看| 激情欧美亚洲| 夜夜添无码一区二区三区| 黄色日韩在线| 欧美一区二区激情| 亚洲裸体俱乐部裸体舞表演av| 成人精品视频在线播放| 亚洲成人直播| 国产青青在线视频| 国产精品毛片在线| 欧美一级片中文字幕| 首页综合国产亚洲丝袜| 91插插插插插插插插| 老司机免费视频一区二区| 国产福利精品一区二区三区| 国产自产v一区二区三区c| 日本人dh亚洲人ⅹxx| 粉嫩av亚洲一区二区图片| 亚洲色偷偷色噜噜狠狠99网 | 第一福利永久视频精品| 天天操中文字幕| 在线视频亚洲一区| 一二三区在线播放| 欧美一区午夜精品| 神马久久久久久久久久| 亚洲视频自拍偷拍| 日本免费在线观看| 色综合视频一区中文字幕| 2018av在线| 国产精品成人国产乱一区| 日韩一区二区三区四区五区| 99免费在线观看视频| 美腿丝袜亚洲图片| 日本一区不卡| 亚洲免费二区| 免费看黄在线看| 日本欧美一区二区在线观看| 欧美又黄又嫩大片a级| 波多野洁衣一区| 国产精品理论在线| 亚洲综合一二区| 中文字幕手机在线视频| 欧美一区二区三区免费| 日本ー区在线视频| 久久国产天堂福利天堂| 涩涩av在线| 亚洲自拍av在线| 国产欧美日韩| 久久av综合网| 久久精品国产成人一区二区三区| www.17c.com喷水少妇| 国产精品每日更新在线播放网址| 激情四射综合网| 欧美视频一二三区| 在线观看xxx| 欧美成年人视频网站| 成人免费直播| 高清av免费一区中文字幕| 大胆日韩av| 久久久久久久久久久福利| 国产一区二区不卡在线| 成人在线手机视频| 欧美日韩色婷婷| 精品人妻一区二区三区三区四区 | 超碰在线免费播放| 国产成人精品免费视频| 卡通动漫精品一区二区三区| 在线观看成人av| 久久亚洲风情| 午夜一区二区三区免费| 一区二区三区在线免费观看| 最近中文字幕av| 亚洲男人天堂九九视频| 黄页在线观看免费| 亚洲影院色无极综合| 日韩欧美中字| 午夜欧美福利视频| 26uuu欧美| 日韩欧美一级视频| 精品蜜桃在线看| 国产传媒在线播放| 成人性生交大片免费看小说| 成人高清av| 99热手机在线| 欧美激情一区在线观看| 天天射天天干天天| 亚洲欧美一区二区激情| 狼人综合视频| 久久99精品久久久久久水蜜桃| 国产综合欧美| 中文字幕avav| 亚洲六月丁香色婷婷综合久久| 91九色蝌蚪91por成人| 伊人久久精品视频| 深夜视频一区二区| 日韩欧美亚洲v片| 人人狠狠综合久久亚洲| 色欲狠狠躁天天躁无码中文字幕| 日韩欧美极品在线观看| 青青久在线视频| 欧美在线性视频| 九九热线有精品视频99| 情侣黄网站免费看| 国产午夜三级一区二区三| 波多野结衣视频在线观看| 国产一区二区成人| 国产资源一区| 亚洲小说欧美另类激情| 国产激情一区二区三区| 国产亚洲欧美精品久久久久久| 亚洲成人中文字幕| 成人做爰视频www网站小优视频| 欧美系列一区| 麻豆精品一区二区av白丝在线| 人妻无码一区二区三区免费| 欧美精品日日鲁夜夜添| 性网站在线观看| 精品国产免费久久久久久尖叫| 1024成人| 国产精成人品免费观看| 欧美久久久久久久久| 中文在线字幕免费观看| 国精产品99永久一区一区| 久久午夜精品| 放荡的美妇在线播放| 亚洲黄色在线看| 99久久亚洲国产日韩美女| 欧美 国产 精品| av电影天堂一区二区在线观看| 无码人妻熟妇av又粗又大| 日韩中文字幕视频在线观看| 精品国产亚洲一区二区三区在线 | 精品91福利视频| 成熟丰满熟妇高潮xxxxx视频| 久久综合九色综合97婷婷女人| 日韩国产亚洲欧美| 成人97在线观看视频| 欧美丝袜足交| 男人的天堂最新网址| 亚洲午夜激情网站| 成人高清免费在线播放| 99超碰麻豆| 日本伊人午夜精品| 久久久国产成人| 日韩中文字幕在线精品| 老司机精品视频在线播放| 四季av一区二区| 亚洲成国产人片在线观看| 中文字幕日本在线观看| 久久av免费观看| 国产福利精品一区|