ibatis 標籤
<iterate>標籤以一個集合或陣列型別的特性作為其property屬性值,ibatis通過遍歷這個集合(陣列)來從一組中重複產生某種sql小片段。這些小片段以conjunction屬性值作為分隔符連線起來,從而形成一個有意義的sql語句片段,open屬性值將作為所呈現的值列表的字首,close屬性值將作為所呈現的值列表的字尾,最終動態形成一個完整合法的sql。
<iterate>標籤屬性
property(必須的)包含列表的引數的特性。
prepend(可選的)該值用於作為字首附加到標籤的結果內容體前。只有在以下3種情況下,prepend值才不會被加為字首:(a)當標籤的結果內容體為空時;(2)如果該標籤第一個產生內容體,並且它被巢狀在一個removeFirstPrepend屬性被設定為true的父標籤時;(c)如果此標籤是跟在prepend屬性取值非空的<dynamic>標籤後的第一個生成內容體的標籤。
open(可選的)該值用於作為字首加到標籤的結果內容體前。如果結果內容體前為空,open值將不會被附加到其前面。open值將在prepend屬性值被新增字首之前先被新增字首。例如,假設prepend=“or” 而open=“(”,則最終得到的組合字首將會是“or(“。
close(可選的)該值用於作為字尾附加到標籤的結果內容體後,如果結果內容體為空,則close值將不起作用。
conjunction(可選的)該值用於連線ibatis遍歷集合(陣列)時重複產生那些sql小片段
removeFirstPrepend(可選的)該值用於決定第一個產生內容的巢狀子標籤是否移除其prepend值。
如何使用<iterate>標籤來為sql語句構建更加複雜的where字句
示例:
。。。
<select id="getProducts" parameterClass="Product"
resultClass="Product">
select * from products
<dynamic prepend="where productType in">
<iterate property="productTypes"
opne="(" close=")"
conjunction=",">
productType=#productType[]#
</iterate>
</dynamic>
</select>
。。。
上例中,我們建立了一個select語句,然後遍歷一組產品型別(product type) 以為其構造了一個更加複雜的過濾器。