mybatis like %% 模糊查詢防sql 注入
阿新 • • 發佈:2019-01-10
所以解決的思路是:sql中應該跟正常的替換方式相同,ibatis並沒有提供特殊寫法,應該在傳入的引數上下功夫。
也就意味著需要自己來做轉譯。
SQL文:
select * from A where A.name like #{key}
java端對Key值進行轉譯:
public static String transfer(String keyword) {
if(keyword.contains("%") || keyword.contains("_")){
keyword = keyword.replaceAll("\\\\", "\\\\\\\\")
.replaceAll("\\%", "\\\\%")
.replaceAll("\\_", "\\\\_");
}
return keyword;
}
然後再轉譯後的key上,按照邏輯新增“%”或者“_”,再設定到statement中即可。
例如:前方一致檢索
key = transfer(key) + "%";
注意:上面的轉譯方法適用於jdk1.6,之前的可能需要將第一個.replaceAll("\\\\", "\\\\\\\\")
改成:.replaceAll("\\", "\\\\") 即可。
也就意味著需要自己來做轉譯。
SQL文:
select * from A where A.name like #{key}
java端對Key值進行轉譯:
public static String transfer(String keyword) {
if(keyword.contains("%") || keyword.contains("_")){
keyword = keyword.replaceAll("\\\\", "\\\\\\\\")
.replaceAll("\\%", "\\\\%")
.replaceAll("\\_", "\\\\_");
}
return keyword;
}
然後再轉譯後的key上,按照邏輯新增“%”或者“_”,再設定到statement中即可。
例如:前方一致檢索
key = transfer(key) + "%";
注意:上面的轉譯方法適用於jdk1.6,之前的可能需要將第一個.replaceAll("\\\\", "\\\\\\\\")
改成:.replaceAll("\\", "\\\\") 即可。