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

複数のルールを使用することはできませんが、1つのルールを別のルールにネストすることはできます。このようにして、(n)個のルールをネストできます。したがって、クエリのネストされたフラグメントは、すべてのルールが満たされた場合にのみ実行されます(これはtrueです)。

これが修正です

<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がnullではないことを確認できます。このようにして、最も外側の条件がfalseの場合、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タグを使用して、ルールをメインのselectステートメントから分離することをお勧めします。

<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 に答える