2010-04-26 56 views
0

我是新來的iBatis,我正在努力與元素。使用<isNull> ibatis問題,同時迭代列表

我想迭代一個Book實例列表(例如)作爲一個HashMap:MyParameters傳入。該列表將被稱爲listOfBooks。

整體SQL語句的條款,因此看起來就像這樣:

<iterate prepend="AND" property="MyParameters.listOfBooks" conjunction="AND" open="(" close=")"> 
... 
</iterate> 

我還需要取決於迭代元素中產生不同的SQL是否每個Book實例在「listOfBooks」列表屬性爲空或者不是。

所以,我需要一個說法是這樣的:

<iterate prepend="AND" property="MyParameters.listOfBooks" conjunction="AND" open="(" close=")"> 
     <isNull property="MyParameter.listOfBooks.title"> 
<!-- SQL clause #1 here --> 

     </isNull> 
    <isNotNull property="MyParameter.listOfBooks.title"> 
<!-- SQL clause #2 here --> 
</isNotNull> 

當我這樣做,我得到一個錯誤消息,指出沒有「可讀的」財產在我的書命名爲「標題」類。但是,每個Book實例包含一個標題屬性,所以我很困惑!我只能說,我已經在試圖查明listOfBooks中特定Book實例的標題時使用了語法。 我正在努力尋找實現這一目標的正確方法。如果任何人都可以提出建議,我會很感激。

感謝

回答

0

我想

property="MyParameter.listOfBooks.title" 

指示ibatis的在MyParameter.listOfBooks對象,這實際上是一個列表來查找一個title屬性。你不想這樣做,你想在列表的每個元素('光標',說)中查找該屬性。

在ibatis的,在<iterate>標籤中,語法MyParameter.listOfBooks[]用於引用該元素,而不是完整列表(ref),我不知道這是否是標記屬性裏面工作,你可以嘗試:要麼

<isNull property="MyParameter.listOfBooks[].title"> 

甚或

<isNull property="title"> 

BTW,我不知道你正在使用的數據庫,但你知道COALESCE功能?

+0

感謝您的參考:我一定會檢查出來的。我試過括號內的語法,因爲我感覺自己的語法是錯誤的實體。不幸的是,這也沒有奏效。底層數據庫是Oracle 10g,但我不知道COALESCE功能。我會研究這個;再次感謝 – onoma 2010-04-26 17:44:28