mybatis中的#和$的區別

動態sql是mybatis的強大特性之一也是這個框架優於其他框架的一個原因,mybatis在對sql進行預編譯之前會對sql語句進行動態解析,#{}和${} 則會有不同的表現:

1、 #將傳入的數據都當成一個字符串,會對自動傳入的數據加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值爲order by "111", 如果傳入的值是id,則解析成的sql爲order by "id".

  • 解析前:select * from user where name = #{name} 解析後:select * from user where name = '姓名'

2、$將傳入的數據直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那麼解析成sql時的值爲order by user_id, 如果傳入的值是id,則解析成的sql爲order by id.

  • 解析前:select * from user where name = ${name} 解析後:select * from user where name = 姓名

3、#方式能夠很大程度防止sql注入。

4、$方式無法防止Sql注入。

5、$方式一般用於傳入數據庫對象,例如傳入表名.

6、一般能用#的就別用$.

MyBatis排序時使用order by 動態參數時需要注意,用$而不是#

發佈了30 篇原創文章 · 獲贊 18 · 訪問量 1402
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章