1. 程式人生 > >ibatis 標籤

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