代码之家  ›  专栏  ›  技术社区  ›  Prasanna

在iBatis中使用isNotNull验证2列

  •  3
  • Prasanna  · 技术社区  · 11 年前

    我有一个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 回复  |  直到 11 年前
        1
  •  2
  •   Brian Showalter    11 年前

    不能在<isNotNull>要素相反,试试这样的方法:

    <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>元素产生输出。

        2
  •  1
  •   Michał Rybak    11 年前

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

    中有一些有用的例子 documentation .