mybatis中的#和$的區(qū)別
1. #將傳入的數(shù)據(jù)都當(dāng)成一個(gè)字符串,會(huì)對(duì)自動(dòng)傳入的數(shù)據(jù)加一個(gè)雙引號(hào)。如:order by #user_id#,如果傳入的值是111,那么解析成sql時(shí)的值為order by "111", 如果傳入的值是id,則解析成的sql為order by "id".
2. $將傳入的數(shù)據(jù)直接顯示生成在sql中。如:order by $user_id$,如果傳入的值是111,那么解析成sql時(shí)的值為order by user_id, 如果傳入的值是id,則解析成的sql為order by id.
3. #方式能夠很大程度防止sql注入。
4.$方式無法防止Sql注入。
5.$方式一般用于傳入數(shù)據(jù)庫對(duì)象,例如傳入表名.
6.一般能用#的就別用$.
MyBatis排序時(shí)使用order by 動(dòng)態(tài)參數(shù)時(shí)需要注意,用$而不是#。
#{}占位符:占位
如果傳入的是基本類型,那么#{}中的變量名稱可以隨意寫
如果傳入的參數(shù)是pojo類型,那么#{}中的變量名稱必須是pojo中的屬性.屬性.屬性...
${}拼接符:字符串原樣拼接
如果傳入的是基本類型,那么${}中的變量名必須是value
如果傳入的參數(shù)是pojo類型,那么${}中的變量名稱必須是pojo中的屬性.屬性.屬性...
注意:使用拼接符有可能造成sql注入,在頁面輸入的時(shí)候可以加入校驗(yàn),不可輸入sql關(guān)鍵字,不可輸入空格