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