mybatis中的#和$的區別
1. #將傳入的資料都當成一個字串,會對自動傳入的資料加一個雙引號。如:order by #user_id#,如果傳入的值是111,那麼解析成sql時的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
2. $將傳入的資料直接顯示產生在sql中。如:order by $user_id$,如果傳入的值是111,那麼解析成sql時的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id.
3. #方式能夠很大程度防止sql注入。
4.$方式無法防止Sql注入。
5.$方式一般用於傳入資料庫對象,例如傳入表名.
6.一般能用#的就別用$.
防止Sql注入
注意:聲明語句不要寫成selectse from t_stu where s_name like '%$name$%',這樣極易受到注入攻擊。
”${xxx}”這樣格式的參數會直接參與sql編譯,因此無法避免注入攻擊。但涉及動態表名和列名時,只能使用「${xxx}」這樣的參數格式。
在編寫mybatis的映射語句時,盡量採用「#{xxx}」這樣的格式。若不得不使用「${xxx}」這樣的參數,要手工地做好過濾工作,以防止sql注入攻擊。
例子
<sql id="condition_where"> <isNotEmpty property="companyName" prepend=" and "> t1.company_name like #companyName# </isNotEmpty> </sql>
java程式碼和你原來的差不多,其實沒什麼不好,你要覺得麻煩把
以上就是小編為大家帶來的淺談mybatis中的#和$的區別以及防止sql注入的方法全部內容了,希望大家多多支持PHP中文網~
更多淺談mybatis中的#和$的區別以及防止sql注入的方法相關文章請關注PHP中文網!