Ibatis 的 模糊查詢 SQL

2021-05-22 02:11:41 字數 812 閱讀 3026

對於一條簡單的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 使用連線符。不過不同的...