3

我有一个 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">

否则我应该怎么做?

4

2 回答 2

2

您不能在 <isNotNull> 元素中使用 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>

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

于 2013-10-23T14:03:01.527 回答
1

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

文档中有一些有用的示例。

于 2013-10-23T13:21:12.440 回答