mybatis中#和$的區(qū)別

一般來說,我們使用mybatis generator來生成mapper.xml文件時(shí),會生成一些增刪改查的文件,這些文件中需要傳入一些參數(shù),傳參數(shù)的時(shí)候,我們會注意到,參數(shù)的大括號外面,有兩種符號,一種是#,一種是$。這兩種符號有什么區(qū)別呢?

SELECT*FROMemployeeWHEREname=#{name}SELECT*FROMemployeeORDERBY${salary}

從上面的內(nèi)容我們可以比較清楚的看到,一般#{}用于傳遞查詢的參數(shù),一般用于從dao層傳遞一個(gè)string或者其他的參數(shù)過來,mybatis對這個(gè)參數(shù)會進(jìn)行加引號的操作,將參數(shù)轉(zhuǎn)變?yōu)橐粋€(gè)字符串。

比如,這邊我們想根據(jù)姓名查詢某個(gè)人的信息,我們會從dao傳一個(gè)參數(shù),比如jack過來,mybatis生成對應(yīng)的sql為:

SELECT*FROMemployeeWHEREname="jack"

而$則不同,我們一般用于ORDER BY的后面。此時(shí)mybatis對這個(gè)參數(shù)不會進(jìn)行任何的處理,直接生成sql語句。例如,此處我們傳入salary作為參數(shù),傳入第二個(gè)中,此時(shí),mybatis生成的sql語句為:

SELECT*FROMemployeeORDERBYsalary

可以看到,mybatis對其沒有做任何的處理。

但是,我們一般推薦使用的是#{},不使用${}的原因如下:

會引起sql注入,因?yàn)?{}會直接參與sql編譯

會影響sql語句的預(yù)編譯,因?yàn)?${ } 僅僅為一個(gè)純碎的 string 替換,在動態(tài) SQL 解析階段將會進(jìn)行變量替換

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 動態(tài) SQL 是 mybatis 的強(qiáng)大特性之一,也是它優(yōu)于其他 ORM 框架的一個(gè)重要原因。mybatis 在對...
    CoderZS閱讀 3,528評論 0 7
  • tips:能用#的就別用$.Mybatis中進(jìn)行參數(shù)傳遞,可以使用兩種方式#{}或者${}其中,#{ } 解析為一...
    金琥閱讀 3,126評論 2 3
  • 夜色 一個(gè)人的夜里,喜歡喝酒,吃點(diǎn)小東西,雖然已經(jīng)洗刷了,食物連胃,酒能連心。然后早上不吃東西,能睡就睡到日上三竿...
    樓臺花舍閱讀 267評論 0 0
  • 我終于還是忍不住了,好吧,我承認(rèn),我無法等到上班那一天了。立刻,馬上,對,就是現(xiàn)在,我必須找到可以替代TA的。不然...
    大午心理閱讀 275評論 0 0
  • 人生的路很長 長到不敢松口氣,轉(zhuǎn)身去追天邊的霞 人生的路很短 短到來不及開始,尋覓自由多彩的夢 自由,想象中的精靈...
    俗然閱讀 489評論 0 3

友情鏈接更多精彩內(nèi)容