mybatis使用foreach語句實現IN查詢

2021-10-08 02:24:29 字數 2321 閱讀 1528

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...