在iBatis中使用isNotNull验证2列

时间:2013-10-23 05:39:00

标签: ibatis

我有像

这样的iBatis查询
<select id="filterQuery" resultMap="guideline" parameterClass="filter">
   <![CDATA[
       SELECT * FROM TABLE_NAME
       WHERE distance BETWEEN #lowerLimit AND #upperLimit 
       AND max_distance BETWEEN #maxLowerLimit AND #maxUpperLimit
       AND region=#state
   ]]>
</select>

但是像lowerLimit,upperLimit,maxLowerLimit,maxUpperLimit和state这样的字段可能为null,在这种情况下,应忽略相应列上的WHERE子句。

我知道我可以使用isNotNull来实现同样的目标。但我想知道是否允许使用AND操作这样的东西来验证这两个字段。

<isNotNull property="lowerLimit" &&  property="upperLimit">

或者我应该怎么做呢?

2 个答案:

答案 0 :(得分:2)

你不能在&lt; isNotNull&gt;中使用AND。元件。相反,尝试这样的事情:

<select id="filterQuery" resultMap="guideline" parameterClass="filter">
    SELECT * FROM TABLE_NAME
    <dynamic prepend="WHERE">
       <isNotNull property="lowerLimit" prepend="and">
           distance <![CDATA[>=]]> #lowerLimit#
       </isNotNull>

       <isNotNull property="upperLimit" prepend="and">
           distance <![CDATA[<=]]> #upperLimit
       </isNotNull>

       <isNotNull property="maxLowerLimit" prepend="and">
           max_distance <![CDATA[>=]]> #maxLowerLimit#
       </isNotNull>

       <isNotNull property="maxUpperLimit" prepend="and">
           max_distance <![CDATA[<=]]> #maxUpperLimit#
       </isNotNull>

       <isNotNull property="state" prepend="and">
           region = #state#
       </isNotNull>
    </dynamic>
</select>

&lt; dynamic&gt;仅当至少有一个&lt; isNotNull&gt;时,元素才会包含WHERE子句。元素产生输出。

答案 1 :(得分:1)

您可以使用prepend="AND"中的<isNotNull>属性添加更多约束。

documentation中有一些有用的例子。