いくつかのSQLMapXMLファイルで使用されているSQLフラグメントを別のファイルに入れたいと思います。現時点では、これらのフラグメントを含む<sql>
要素は、<select>
などの他の要素と一緒にマッパーの1つに含まれているため、見つけるのが困難です。
いくつかの<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番目のSQLマップファイル:
<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>
これはまさに私が以前取り組んでいたプロジェクトが行ったことです。一般的なフラグメントは、メインのiBATIS構成ファイルに含まれている別のファイルで定義されました。
ルートにCore.ism.xml
という名前のSQLマップファイルがありました。これは次のようになります。
<sqlMap namespace="Core" >
<sql id="fragmentBasicAuditFieldNames">
CreateDate, CreateUser,
UpdateDate, UpdateUser, UpdateCode
</sql>
....
そして、SQLマップファイルでは、次のように参照できます。
<include refid="Core.fragmentBasicAuditFieldNames" />
私はあなたが正しく尋ねていたことを理解したと思います!
言う、あなたはいくつかを持っています
<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>
また、あなたは見ることができます ここ