MyBatis中#{}和${}的三個區別

區別1:

#{} 相當於JDBC SQL語句中的佔位符 “?”(PreparedStatement)
${} 相當於JDBC SQL語句中的連接符號 “+” (Statement)

所以,${} 存在SQL注入問題

區別2:

#{} 進行輸入映射的時候,會對參數進行類型解析(如果是String類型,會自動加上引號)
${} 進行輸入映射的時候,將參數原樣輸出到SQL語句中
所以在like條件查詢中要小心
例如:
當查詢條件中的name=”崑山花臂男”時
使用#{}

select * from user where username like '%#{name}%'  

會得到如下的sql:

select * from user where username like '%'崑山花臂男'%'

這個sql會執行報錯。
而使用${}時

select * from user where username like '%${name}%'  

會得到如下的sql:

select * from user where username like '%崑山花臂男%' 

該sql可以正常執行。

區別3:

#{} 如果進行簡單類型(String,Date、8種基本類型的包裝類)的輸入映射時,#{}中參數名稱可以任意
#{} 如果進行簡單類型(String,Date、8種基本類型的包裝類)的輸入映射時,${}中參數名稱必須是value

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章