轉自:http://blog.csdn.net/scorpio3k/article/details/7610973
對于ibaits參數引用可以使用#和$兩種寫法,其中#寫法會采用預編譯方式,將轉義交給了數據庫,不會出現注入問題;如果采用$寫法,則相當于拼接字符串,會出現注入問題。
例如:1)#xxx# 代表xxx是屬性值、map里面的key或者是你的pojo對象里面的屬性, ibatis會自動在它的外面加上引號,表現在sql語句是這樣的where xxx = 'xxx' ;
2)$xxx$ 則是把xxx作為字符串拼接到你的sql語句中,如order by $xxx$ , ibatis 就會把他翻譯成order by xxx
注入問題:
例如,如果屬性值為“' or '1'='1 ”,采用#寫法沒有問題,采用$寫法就會有問題。
對于like語句,難免要使用$寫法,
1. 對于Oracle可以通過'%'||'#param#'||'%'避免;
2. 對于MySQL可以通過CONCAT('%',#param#,'%')避免;
3. MSSQL中通過'%'+#param#+'% 。
如下3種SQL語句:
[html] view plain copymysql: select * from t_user where name like concat('%',#name #,'%') oracle: select * from t_user where name like '%'||#name #||'%' SQL Server:select * from t_user where name like '%'+#name #+'%新聞熱點
疑難解答