foreach語句中, collection屬性的引數型別可以使:list、陣列、map集合
item : 表示在迭代過程中每乙個元素的別名,可以隨便起名,但是必須跟元素中的#{}裡面的名稱一樣。
index :表示在迭代過程中每次迭代到的位置(下標)
open :字首, sql語句中集合都必須用小括號()括起來
close :字尾
separator :分隔符,表示迭代時每個元素之間以什麼分隔
#{}是預編譯處理,katex parse error: expected 'eof', got '#' at position 20: …符串替換。mybatis在處理#̲{}時,會將sql中的#{}替…{}時,就是把${}替換成變數的值。使用#{}可以有效的防止sql注入,提高系統安全性。
例如:# 是將傳入的值當做字串的形式,eg:select id,name,age from student where id =#,當前端把id值1,傳入到後台的時候,就相當於 select id,name,age from student where id =『1』.
$ 是將傳入的資料直接顯示生成sql語句,eg:select id,name,age from student where id =$,當前端把id值1,傳入到後台的時候,就相當於 select id,name,age from student where id = 1.
(1)$ 符號一般用來當作佔位符,常使用linux指令碼的人應該對此有更深的體會吧。既然是佔位符,當然就是被用來替換的。知道了這點就能很容易區分$和#,從而不容易記錯了。
(2)預編譯的機制。預編譯是提前對sql語句進行預編譯,而其後注入的引數將不會再進行sql編譯。我們知道,sql注入是發生在編譯的過程中,因為惡意注入了某些特殊字元,最後被編譯成了惡意的執行操作。而預編譯機制則可以很好的防止sql注入。
select * from healthcoupon where usetype in ( '4' , '3' )
其中usetype=「2,3」;這樣的寫法,看似很簡單,但是mybatis不支援。。但是mybatis中提供了foreach語句實現in查詢,foreach語法如下:
foreach語句中, collection屬性的引數型別可以使:list、陣列、map集合
item: 表示在迭代過程中每乙個元素的別名,可以隨便起名,但是必須跟元素中的#{}裡面的名稱一樣。
index:表示在迭代過程中每次迭代到的位置(下標)
open:字首, sql語句中集合都必須用小括號()括起來
close:字尾
separator:分隔符,表示迭代時每個元素之間以什麼分隔
正確的寫法有以下幾種寫法:
(一)、selectbyidset(list idlist)
listselectbyidset(list idlist);
select
from t_user
where id in #
(二)、list selectbyidset(string idlist)
如果引數的型別是array,則在使用時,collection屬性要必須指定為 array
listselectbyidset(string idlist);
select
from t_user
where id in #
(三)、引數有多個時
當查詢的引數有多個時,有兩種方式可以實現,一種是使用@param(「***」)進行引數繫結,另一種可以通過map來傳引數。
3.1 @param(「***」)方式
listselectbyidset(@param("name")string name, @param("ids")string idlist);
select
from t_user
where name=# and id in #
3.2 map方式
mapparams = new hashmap(2);
params.put("name", name);
params.put("idlist", ids);
select
from t_user where
name = #
and id in
#
C DataSet操作for與foreach的區別
最近因為專案需要,繼而轉戰到c 的探索中,我想在c 中資料集操作是非常頻繁的,在學習過程中我遇到了一些問題,所以記錄下來以免以後忘記,同時也希望幫助到有需要的人!在操作dataset中我們怎麼來遍歷乙個資料集呢,一般我們會這麼做 private void weightsnormalized data...
mybatis sql語句中的foreach標籤
mybaits sql中不能直接用in只能用foreach替代 網上有很多關於foreach的例子,就像這樣 不知道是我用的不對還是怎麼著,這樣是就是報錯,原因也很簡單只要將 改成 就可以使用了。還有人說用這個 可以直接使用in,不懂也沒弄出來。collection listtag 要迴圈的集合 i...
MyBatis使用細節
1.錯誤 with a primitive return type int 原因 返回值型別為int,但是查詢出來的結果有空值 null 無法轉換成基本型別。包括char,long,short都有可能。select case when select provinceid from kdmc t pr...