Ibatis的 和 的區別

2022-05-08 20:18:15 字數 947 閱讀 5969

來自別人的:

總結:凡是#的,都作為引數,用setobject方式預編譯。而$方式的,則直接替換字串。$很不安全,可能出現sql注入攻擊風險。

在實際中,除了like語句外,也有人經常對in引數使用$$,如a.order_status in( $orderstatus$ ) 

對於一條簡單的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 和 的區別

專案中在寫ibatis中的sql語句時,order by field 執行時總是報錯,後來上網查了查,才知道這裡不該用 而應該用 隨即查了下 與 的區別 總結如下 1.是把傳入的資料當作字串,如 field 傳入的是id,則sql語句生成是這樣,order by id 這當然會報錯 2.傳入的資料直...

ibatis 和 的區別

ibatis 和 的區別 昨天乙個專案中在寫 ibatis中的sql語句時,order by field 執行時總是報錯,後來上網查了查,才知道這裡不該用 而應該用 隨即查了下 與 的區別 總結如下 1.是把傳入的資料當作字串,如 field 傳入的是id,則sql語句生成是這樣,order by ...

Ibatis中的 和 區別

在ibatis中我們使用sqlmap進行sql查詢時需要引用引數,在引數引用中遇到的符號 和 之間的區分為,可以進行與編譯,進行型別匹配,而 不進行資料型別匹配,例如 select from table where id id 其中如果欄位id為字元型,那麼 id 表示的就是 id 型別,如果id為...