ibatis中的动态查询错误

时间:2012-05-04 07:49:48

标签: sql ibatis dynamic-sql

我的动态查询出错了。这是我的查询:

<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不为null,则查询有效。但是如果属性为null而另一个属性LastName不为null,则会出现SQL错误。

因为在这种情况下,SQL语句变为如下:

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

如果第一个属性变为AND

,如何删除第一个前置的Null

P.S:

我也试过removeFirstPrepend="true"

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

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

1 个答案:

答案 0 :(得分: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