<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) 以爲其構造了一個更加複雜的過濾器。