21

いくつかのSQLMapXMLファイルで使用されているSQLフラグメントを別のファイルに入れたいと思います。現時点では、<sql>これらのフラグメントを含む要素は、などの他の要素と一緒にマッパーの1つに含まれ<select>ているため、見つけるのが困難です。

<sql>いくつかの要素を定義し、インターフェースへの実装を生成するために使用されないマッパーを使用できますか?このマッパーの正しい名前空間は何でしょうか?

これは、framentを含むSQLマップファイルです。

<mapper namespace="com.company.project.dao.someDao">

    <sql id="whereDate">
        WHERE date(`time`) BETWEEN #{startDate} AND #{endDate}
    </sql>  

    <sql id="someOtherSqlFragment">
        ...
    </sql>

    <select id="getSomeData" resultType="SomeClass" parameterType="DateParam" >
        SELECT some_column, another_column          
        FROM some_table
        <include refid="whereDate"/>
        <include refid="otherSqlFragment"/>
    </select>

</mapper>

次のように要素を分離したいと思います。
最初のSQLマップファイル:

<mapper namespace="com.company.project.dao.???">

    <sql id="whereDate">
        WHERE date(`time`) BETWEEN #{startDate} AND #{endDate}
    </sql>  

    <sql id="someOtherSqlFragment">
        ...
    </sql>

</mapper>

2番目のSqlMapファイル:

<mapper namespace="com.company.project.dao.someDao">

    <select id="getSomeData" resultType="SomeClass" parameterType="DateParam" >
        SELECT some_column, another_column          
        FROM some_table     
        <include refid="whereDate"/>
        <include refid="otherSqlFragment"/>
    </select>

</mapper>
4

2 に答える 2

34

これはまさに私が取り組んでいたプロジェクトが行ったことです。一般的なフラグメントは、メインのiBATIS構成ファイルに含まれている別のファイルで定義されました。

Core.ism.xml次のような名前のSQLマップファイルがルートにありました。

<sqlMap namespace="Core" >

    <sql id="fragmentBasicAuditFieldNames">
        CreateDate, CreateUser, 
        UpdateDate, UpdateUser, UpdateCode 
    </sql>

    ....

そして、SQLマップファイルでは、次のように参照できます。

<include refid="Core.fragmentBasicAuditFieldNames" />

私はあなたが正しく求めていたことを理解したと思います!

于 2011-05-20T08:13:52.463 に答える
5

言う、あなたはいくつかを持っています

<mapper namespace="Common">
   <sql id="idsIn">
        ${column} IN
        <foreach item="id" collection="ids" separator="," open="(" close=")">
            #{id}
        </foreach>
    </sql>
</mapper>

別のマッパーよりも、次のように使用できます。

<mapper namespace="OtherMapper">
    <sql id="someSql">
        ...
        <include refid="Common.idsIn">
            <property name="column" value="${column}"/>
            <!-- OR hardcode: <property name="column" value="id"/> -->
            <property name="filterPksTable" value="${filterPksTable}"/>
        </include>
        ...
    </sql>
</mapper>

また、ここで見ることができます

于 2017-04-11T22:48:39.840 に答える