對於一條簡單的sql語句,例如:
select * from user where id=#id#
ibatis會把sql預編譯為
select * from user where id=?
接著會把傳入的值進行填充,類似於 jdbc 的 preparestatment 的形式。
之前的sql是簡單的形式,加入需要用到模糊查詢的like就比較麻煩,而且可能會出現sql注入的情況。
假如需要查詢使用者名稱中帶"sa"的使用者,可能會這樣來寫 sql
select * from user where name like '%sa%'
但是在ibatis的xml中不能這樣寫,如果寫成
select * from user where name like #%sa%# 或者 like %#sa#% 是肯定不行的,會有報錯。
有個很簡單的辦法,就是寫成
select * from user where name like '%$name$%'
的樣子,$符號會把引數原樣嵌入sql語句中而不進行預編譯,這就使得有可能出現sql注入攻擊。其實ibatis從根本上簡單的說,凡是#的,都作為引數,用setobject方式預編譯。而$方式的,則直接替換字串。 所以說,$很不安全,會把使用者的輸入直接當引數放入 sql。
結論:最好不要用like來進行查詢,1是因為效率低,2是因為在ibatis裡使用是相當麻煩的,可讀性很差,如果真的要用,不要使用$,而是使用#的like拼湊形式:
select * from user where name like '%'||#name#||'%';
ibatis中使用like模糊查詢
無效的方法 select from table1 where name like name 兩種有效的方法 1 使用 代替 此種方法就是去掉了型別檢查,使用字串連線,不過可能會有sql注入風險。select from table1 where name like name 2 使用連線符。不過不同的...
ibatis中使用like模糊查詢
無效的方法 select from table1 where name like name 兩種有效的方法 1 使用 代替 此種方法就是去掉了型別檢查,使用字串連線,不過可能會有sql注入風險。select from table1 where name like name 2 使用連線符。不過不同的...
ibatis中使用like模糊查詢
無效的方法 select from table1 where name like name 兩種有效的方法 1 使用 代替 此種方法就是去掉了型別檢查,使用字串連線,不過可能會有sql注入風險。select from table1 where name like name 2 使用連線符。不過不同的...