1

我是 iBatis 的新手。我想是否可以将多个值传递给 xml。

例如,

    <select id="getSth" resultClass="Object" parameterClass="Object">
    select * from table
<isNotEmpty property="startDate, endDate" prepend="AND">
    date_start >= #startDate# AND date_end <= #endDate#
</isNotEmpty>
</select>

有可能吗?如果没有,有什么方法吗??

提前致谢。

4

3 回答 3

2

不,不能在属性属性中使用多个值。但是您可以使用嵌套标签来实现这一点。

<select id="getSth" resultClass="Object" parameterClass="Object">
     select * from table
     <isNotEmpty property="startDate" >
         <isNotEmpty property="endDate" >
            where date_start &gt;= #startDate# AND date_end &lt;= #endDate#
         </isNotEmpty>
    </isNotEmpty>
</select>

PS:您不能在查询中使用小于 '<' 、大于 '>' 的符号。而是分别使用&lt;&gt;

于 2013-03-27T07:14:09.907 回答
1
<select id="getSth" resultClass="Object" parameterClass="Object">
 select * from table
 <isNotEmpty property="startDate" >
     <isNotEmpty property="endDate" >
        where date_start &gt;= #startDate# AND date_end &lt;= #endDate#
     </isNotEmpty>
     <isNotEmpty property="endDate" >
        where date_start &gt;= #startDate# AND date_end &lt;= #endDate#
     </isNotEmpty>
</isNotEmpty>

于 2013-08-27T14:15:39.333 回答
0

您不能使用多条规则,但可以将一条规则嵌套在另一条规则中。通过这种方式,您可以嵌套 (n) 条规则。因此,查询的嵌套片段仅在满足所有规则时运行(这是真的)。

所以这是修复

<select id="getSth" resultClass="Object" parameterClass="Object">
SELECT * FROM TABLE
<isNotEmpty property="STARTDATE">
    <isNotEmpty property="ENDDATE">
          WHERE DATE_START &gt;= #STARTDATE# AND DATE_END &lt;= #ENDDATE#
    <isNotEmpty>
<isNotEmpty>
</select>

如果需要,您还可以检查其他条件,以便您可以有混合规则。

所以我可以在检查 isNotEmpty 之前检查我的 STARTDATE、ENDDATE 是否为空 isNotNull。这样,如果最外面的条件为假,IBATIS 就不会检查其他条件。

<select id="getSth" resultClass="Object" parameterClass="Object">
SELECT * FROM TABLE
<isNotNull property="STARTDATE">
    <isNotNull property="ENDDATE">
        <isNotEmpty property="STARTDATE">
            <isNotEmpty property="ENDDATE">
                  WHERE DATE_START &gt;= #STARTDATE# AND DATE_END &lt;= #ENDDATE#
            <isNotEmpty>
        <isNotEmpty>
    </isNotNull>
</isNotNull>
</select>

有时,您的状况片段可能会变得如此之大,并且可能难以阅读、理解和记录。您可能希望使用 IBATIS sql 标记将您的规则与主选择语句分开。

<sql id="getStartDateAndEndDateRuleFragment">
<isNotNull property="STARTDATE">
    <isNotNull property="ENDDATE">
        <isNotEmpty property="STARTDATE">
            <isNotEmpty property="ENDDATE">
                  WHERE DATE_START &gt;= #STARTDATE# AND DATE_END &lt;= #ENDDATE#
            <isNotEmpty>
        <isNotEmpty>
    </isNotNull>
</isNotNull>
</sql>

然后您的最终选择标签将如下所示。

<select id="getSth" resultClass="Object" parameterClass="Object">
SELECT * FROM TABLE <include refid="getStartDateAndEndDateRuleFragment" />
</select>

这更清晰,更不容易混淆。这样,在您的团队中工作的其他共同开发人员只需简单地注视它并弄清楚它在做什么。

于 2013-05-11T11:10:00.073 回答