mybatis裡面的#和$之間的區別
阿新 • • 發佈:2018-11-19
mybatis中有兩個常見的符號#和$,在進行變數的賦值的時候是很常見的,我的理解就是#是需要進行編譯的,是字串進行編譯之後在放入到sql中,如果不是單純的字串替換,而$是直接進行字串的替換工作,兩者各有有缺點。
一、#
我們一般在剛剛接觸到mybatis的時候都是使用的是#{變數名字},來進行sql語句的賦值工作,比如 select * from table_name where name = #{name},來進行查詢,在接口裡面傳入Map或者是String都是可以的,這樣的是mybatis進行了語句的編譯工作,#{name},必須要放到name=後面,這樣才會編譯通過,進行執行sql語句
二、$
然而有的時候我們需要進行變化傳輸sql語句,這個時候一般都會用到的是<if>等mybatis裡面的動態標籤來動態拼接sql語句,但是有的時候根據一些業務場景是需要傳輸表名或者是特定的變數名的,這個時候就需要根據業務來動態的改變查詢的表名等問題,這個時候$的好處就體現了,$我的感覺就是單純的字串替換,比如,select * from table_name where name = ${name}這個時候mybatis不需要編譯而是直接進行字串的替換工作,比如我要傳入一個表名,select * from ${tableName} where name = #{name}
三、#和$之間的取捨
根據我的經驗,一般還是使用#,因為#是比較安全的一種傳輸方式,在一些滲透和安全性校驗的時候,$不是特別安全,容易引起sql的注入問題,導致毀滅性災難,但是也不是說一點不能用,只能說不可以從前臺傳輸有關於sql的語句來使用$否則就會出現刪除資料的問題,所以請大家慎重使用。