Mybatis中 和 的區別

2021-08-29 18:21:18 字數 576 閱讀 7228

最近在工作中用到了mybatis,其中傳入資料時,有時用的$有時則是#,上網搜了而一下以進一步了解他們二者之間的區別:

我們經常使用的是#{},一般解說是因為這種方式可以防止sql注入,簡單的說#{}這種方式sql語句是經過預編譯的,它是把#{}中間的引數轉義成字串,舉個例子:

delete from a where b = #

這樣的傳值進去是帶引號的,而是用$傳值則是直接傳遞引數字串,不帶引號,例如前台想傳過來某錶名時就不能用#,要用$ ":

select a, b from $

但是使用$的時候會存在被注入攻擊的危險:

例如 原本的語句是傳入a

select a,b from a,看上去沒什麼問題,

但是如果傳入的值是:a;drop table a;  ,這條資料實際執行時便是:

select a,b from a;drop table a; 變成了刪除該錶!本來一條查詢語句就變成了刪除,這就是注入攻擊的風險.

因此要麼不用$,要麼就對傳入值做出嚴格的控制.

總結:#{} 這種取值是編譯好sql語句再取值

${} 這種是取值以後再去編譯sql語句

myBatis中 和 區別

1.將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號。如 order by user id 如果傳入的值是111,那麼解析成sql時的值為order by 111 如果傳入的值是id,則解析成的sql為order by id 2.將傳入的資料直接顯示生成在sql中。如 order by u...

mybatis 中 和 區別

在使用mybatis 框架時 在xml的配置檔案中,通常是使用 來獲取數值的 如 select from t user inf where id 這時 如果你傳入的值為zhangsan 則會編譯成為 select from t user inf where id zhangsan mybatis 會...

Mybatis 中 和 區別

號與 區別 號表示引數,代表乙個字串。如 select a,b,c from table1 where id value 傳入引數後如 value 1 則可生成 select a,b,c from table1 where id 1 select a,b,c from table1 where ci...