mybatis中sql傳入引數為集合、陣列時解決方式
阿新 • • 發佈:2019-01-23
平時我們寫sql時只需要傳入一個查詢引數或者幾個不同欄位的引數就足夠了,但是如果傳入的引數是集合、陣列的時候該怎麼辦呢?
mybatis中的<foreach>標籤很好的提供了對這類問題的解決方法,利用<foreach>標籤可以實現sql條件的迴圈,這樣這個問題就能很好的解決了
<foreach>標籤的主要屬性有:
1、item:集合中的一個元素,表示集合每一個元素進行迭代時的別名
2、index:索引,表示在迭代過程中,每次迭代到的位置
3、separator:表示每次迭代之間以什麼符號作為分隔
4、open:表示該語句以什麼開始
5、close:表示該語句以什麼結束
6、collection:需要迭代的變數
collection的值其實就是mybatis把引數轉化成Map以後這個Map的key,這個key對應的value必須是一個集合或者陣列
mybatis中的<foreach>標籤很好的提供了對這類問題的解決方法,利用<foreach>標籤可以實現sql條件的迴圈,這樣這個問題就能很好的解決了
<foreach>標籤的主要屬性有:
1、item:集合中的一個元素,表示集合每一個元素進行迭代時的別名
2、index:索引,表示在迭代過程中,每次迭代到的位置
3、separator:表示每次迭代之間以什麼符號作為分隔
4、open:表示該語句以什麼開始
5、close:表示該語句以什麼結束
6、collection:需要迭代的變數
collection的值其實就是mybatis把引數轉化成Map以後這個Map的key,這個key對應的value必須是一個集合或者陣列
例:
<foreach collection="roles" item="role" open="" close="" separator="OR">
role = #{role}
</foreach>
此外,mybatis常用的標籤還有where、if、set、choose、trim等
1、where標籤
一般我們寫sql語句都要寫where條件,如果傳入的引數是空的,此時查詢出的結果很可能是空的,也許我們需要引數為空時,但卻查出了全部的資訊。這時我們可以使用動態sql,增加一個判斷,當引數不符合要求的時候,我們可以不去判斷此查詢條件。where標籤就相當於where關鍵字,可以自動去除第一個and。
2、if標籤
if標籤一般配合where標籤使用,進行傳入引數的判斷
3、set標籤
當在update語句中使用if標籤時,如果前面的if沒有執行,則或導致逗號多餘錯誤。使用set標籤可以將動態的配置set關鍵字,
剔除追加到條件
末尾的任何不相關的逗號。
4、choose標籤
有時候我們並不想應用所有的條件,而只是想從多個選項中選擇一個。MyBatis提供了choose 元素,按順序判斷when中的條件是否成立,如果有一個成立,則choose結束。當choose中所有when的條件都不滿足時,則執行 otherwise中的sql語句。
類似於Java 的switch 語句,choose為switch,when為case,otherwise則為default。if是與(and)的關係,而choose是或(or )
的關係。
<choose>
<when test="startTime != null and startTime != '' and endTime != null and endTime != ''">
and time between #{startTime} AND #{endTime}
</when>
<otherwise></otherwise>
</choose>
5、trim標籤
trim標籤是靈活的去處多餘關鍵字的標籤。
標籤屬性
prefix:字首覆蓋並增加其內容
suffix:字尾覆蓋並增加其內容
prefixOverrides:字首判斷的條件
suffixOverrides:字尾判斷的條件