MyBatis / iBatis-многоразовые фрагменты sql в отдельном файле карты SQL?
Я хотел бы поместить фрагменты sql, используемые несколькими моими XML-файлами SQL Map, в отдельный файл. На данный момент <sql>
элементы с этими фрагментами находятся в одном из картографов вместе с другими элементами, такими как <select>
, что делает их трудно найти.
Могу ли я иметь картограф, который определяет только несколько <sql>
элементов и не используется для создания реализации интерфейса? Каким будет правильное пространство имен этого картографа?
это файл карты SQL с в 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>
Я хотел бы разделить элементы следующим образом:
Первый файл карты Sql:
<mapper namespace="com.company.project.dao.???">
<sql id="whereDate">
WHERE date(`time`) BETWEEN #{startDate} AND #{endDate}
</sql>
<sql id="someOtherSqlFragment">
...
</sql>
</mapper>
второй файл карты Sql:
<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 ответов
Это именно то, что проект я сделал. Общие фрагменты были определены в отдельном файле, который был включен в основной конфигурационный файл iBATIS.
у нас был файл карты SQL в корне с именем Core.ism.xml
, который выглядел вот так:
<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>
кроме того, вы можете посмотреть здесь