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>

<dynamic> 要素に WHERE 句が含まれるのは、少なくとも 1 つの <isNotNull> 要素が出力を生成する場合のみです。

于 2013-10-23T14:03:01.527 に答える