Des fragments sql MyBatis / iBatis - réutilisables dans un fichier SQL Map séparé?

je voudrais mettre des fragments sql utilisés par plusieurs de mes fichiers XML SQL Map dans un fichier séparé. En ce moment, le <sql> éléments avec ces fragments sont dans l'une des mappeurs avec d'autres éléments comme <select>, ce qui les rend difficiles à trouver.

Puis-je avoir un mappeur qui définit seulement quelques <sql> éléments et n'est pas utilisé pour générer une implémentation vers une interface? Quel serait le namespace correct de ce mapper?

Ceci est le fichier de Map SQL avec le framents:

<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
    </select>

        FROM some_table

        <include refid="whereDate"/>

        <include refid="otherSqlFragment"/>

    </select>

</mapper>

je voudrais séparer les éléments comme ceci:

Premier fichier Sql Map:

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

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

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

</mapper>

Deuxième fichier Sql Map:

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

    <select id="getSomeData"
            resultType="SomeClass"
            parameterType="DateParam" >
        SELECT some_column, another_column
    </select>

        FROM some_table

        <include refid="whereDate"/>

        <include refid="otherSqlFragment"/>

    </select>

</mapper>
20
demandé sur prasopes 2011-05-20 12:01:12

2 réponses

c'est exactement ce que faisait un projet sur lequel je travaillais. Les fragments communs ont été définis dans un fichier séparé qui a été inclus dans le fichier de configuration iBATIS principal.

nous avions un fichier de map SQL à la racine nommé Core.ism.xml qui ressemblait à ceci:

<sqlMap namespace="Core" >

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

    ....

et puis dans nos fichiers de map SQL nous pourrions le référencer comme ceci:

<include refid="Core.fragmentBasicAuditFieldNames" />

j'espère avoir bien compris ce que vous demandiez!

27
répondu 2011-05-20 08:13:52

dis, tu en as

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

Que dans un autre mappeur vous pouvez l'utiliser comme:

<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>

Aussi, vous pouvez avoir un coup d'oeil ici

2
répondu Alexander Davliatov 2017-05-23 10:30:55