2012-05-04 33 views
3

我在動態查詢時遇到錯誤。這是我有查詢:ibatis中的動態查詢錯誤

<dynamic> 
    select * from Tbl_Member 
    WHERE 

    <isNotNull property="FirstName"> 
     FIRST_NAME = #lastName# 
    </isNotNull> 

    <isNotNull prepend="and" property="lastName"> 
     LAST_NAME = #lastName# 
    </isNotNull> 

    <isNotNull prepend="and" property=""> 

    </isNotNull> 

    . 
    . 
    . 
    . 

</dynamic> 

如果屬性FirstName不爲空,查詢工作。但是,如果該屬性爲空,而其他左側屬性LastName不爲空,則會出現SQL錯誤。

因爲在這種情況下的SQL語句變成如下:

select * from Tbl_Member WHERE AND LAST_NAME = ? ... 

如何刪除第一前綴AND如果第一個屬性變得Null

PS:

我也嘗試過removeFirstPrepend="true"

<isNotNull prepend="and" property="lastName" removeFirstPrepend="true"> 
    LAST_NAME = #lastName# 
</isNotNull> 

但不幸的是,它也不起作用。

回答

3

嘗試

<dynamic prepend="WHERE"> 

select * from Tbl_Member 
<dynamic prepend="WHERE"> 

<isNotNull prepend="and" property="FirstName"> 
    FIRST_NAME = #lastName# 
</isNotNull> 

<isNotNull prepend="and" property="lastName"> 
    LAST_NAME = #lastName# 
</isNotNull> 

<isNotNull prepend="and" property=""> 

</isNotNull> 

. 
. 
. 
. 

</dynamic> 

http://ibatis.apache.org/docs/dotnet/datamapper/ch03s09.html

+0

謝謝您的回答。這是工作:) – AKZap