1. 程式人生 > >mybatis中${}與#{}的區別

mybatis中${}與#{}的區別

mybatis中${}和#{}都可以在增刪改查中使用

select * from student where name = ${name};
select * from student where name = #{name};

二者的意思相同,都可以用來查詢資料庫中的內容,且查詢的結果相同,但是二者仍存在較大的差異:

#{}是通過佔位符?的方式來實現查詢功能的,而${}則只是簡單的字元的替換功能來實現查詢的功能,總結為以下的幾點不同之處

(1)安全性的差異

因為${}是通過簡單的字元替換來實現功能的,所以${}並不安全,很容易被注入的sql語句攻擊,而#{}是通過佔位符的方式來實現功能的,安全性較高

(2)${}可以進行運算的功能而#{}不能運算

 update product set name='${name}', price=${price+100} where id = #{id}

比如將指定的商品價格加100時,就需要使用${}而不能使用#{}但是為確保安全性,where後一般使用#{}

(3)${}可以替換sql語句中的任意一個部分,但是#{}只能替換值

上條語句也可以改寫為:

 update ${tablename} set name='${name}', price=${price+100} where id = #{id}

通過給tablename賦值來修改指定表中的資料,但是此處的${}不能使用#{}來替換。

 

 

綜上所述:針對非變數的部分,使用${},針對變數,如果值是在原有值得基礎上進行計算得來一般使用${},否則使用#{},一般情況下,先要考慮使用#{}