IBATIS中 與 使用

2021-09-08 10:33:39 字數 1596 閱讀 1777

ibatis中關於iterate和『$』與『#』的應用 

乙個包含list元素的hashmap引數賦給sqlmap 

public int getcountbyid(string id, string title, list ids) throws exception   

上面的ids元素是乙個list,裡面包含了乙個id列表。id和title都是string。 

select *    

from mytable      

id=#id#   

title like '%$title$%'  

ids in   

#ids#   

order by time desc   

在上面的sqlmap中要注意的地方有兩個。

第乙個地方是,標籤中一定要記得寫property="ids",不要因為在上面的 

標籤中判斷了該屬性,就在這個標籤中忽略了property的書寫(如果你忘了 

寫iterate中的property屬性的話系統會報這樣的錯誤cause:com.ibatis.sqlmap.client.sqlmapexception: parameterobject or 

property was not a collection, array or iterator.),並且要記住, 

#ids# 中的『』符號,只有這樣ibatis才把ids作為乙個可迭代的物件(list,陣列...),不然的話ibatis會把ids作為普通的string來處理。 

第二個地方就是,上面的關於『$『與『#』的應用。 

下面就來說說關於『$『與『#』的應用。在通常情況下ibatis的引數在sqlmap中使用#param#的形式,引數名以』#『包著,但當使用 

sql的like語句時就發生了問題,在單引號中無法使用#param#這種形式。解決辦法有: 

1.當應用select * from  table1 where  col like 』value%』時,如果要把『value』以引數代替,可以把整個like後面的字串 

全改為引數。即:select * from  table1 where  col like #param#  ,此時引數param的值為字串"value%" 

2.使用『$』將引數名包起來。例如:name like 『%#name#%』。我們的解決方法有2。(a)把name like 『%#name#%』的#換成$,即:name like 『%$name$%』。(b)用||連線字串的方式,寫成,name like 『%』|| #name#『%』。

3.當使用order by $column_name$,不要使用#column_name#。因為$不會轉義,是什麼就說什麼,#會轉成字串'column_name'。

4.#{}是以預編譯的形式,是安全的,它將傳入的資料都當成乙個字串,會對自動傳入的資料加乙個雙引號,將引數設定到sql語句中,使用preparedstatement防止sql注入。而${}是未經過預編譯的,直接取出的值,直接拼裝在sql語句中,存在sql注入的危險,會有安全問題;

5.使用${}的情況,order by、like語句只能用${} 了,用#{}會多個』 』導致sql語句失效。此外動態拼接sql,模糊查詢時也要用${}。

本文**:

Ibatis中iterate的使用

ibaits中iterate標籤包含關鍵字如下 select from testtable type type 使用測試例子的sql select from testtable where type 1 and id in 1,2,3,4 prepend 拼接sql前使用的字元 比如 and ope...

ibatis中 CDATA 使用解釋

ibatis中什麼時候需要用到 經過反覆的實驗證實,假如在ibatis中自己的sql中包含 需要用號一樣。符號ibatis中一般不出現,除非很特殊就是寫死要查某個值裡含有這個 單引號我試了,沒有影響 類似如下sql配置是沒有題目的 引號我也試了,同樣沒有題目 類似如下 看了ibaits的dtd文件,...

ibatis 中 與 的區別

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