ibatis 配置文件中取值有兩種:#和$
如果傳值爲userName="zhangsan"
#userName# , ibatis會自動在它的外面加上引號,結果是這樣的:select * from user where user_name = 'zhangsan' ;
$userName$ 則是把zhangsan作爲字符串拼接到sql中,結果是這樣的:select * from user where user_name=zhangsan;
#寫法會採用預編譯方式,將轉義交給了數據庫,不會出現注入問題;如果採用$寫法,則相當於拼接字符串,會出現注入問題如:
userName = "zhangsan' or user_name like'%%";
select * from user where user_name like '%$userName$%'; 會變成
select * from user where user_name like '%zhangsan' or user_name like '%%%'; 這樣就會查詢出所有的數據。
解決方法如下:
mysql: select * from XXX where name like concat('%',#name#,'%')
oracle&db2: select * from XXX where name like '%'||#name#||'%'
SQL Server:select * from XXX where name like '%'+#name#+'%