我有像
这样的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">
或者我应该怎么做呢?
答案 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中有一些有用的例子。