2012-05-04 30 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