java MyBatis/iBatis -在单独的SQLMap文件中的可重用SQL片段?

enyaitl3  于 2023-01-19  发布在  Java
关注(0)|答案(3)|浏览(139)

我想把我的几个SQL Map XML文件使用的SQL片段放在一个单独的文件中。目前,带有这些片段的<sql>元素与其他元素(如<select>)一起位于一个Map器中,这使得它们很难找到。
我可以有一个只定义了几个<sql>元素的Map器,并且不用于生成接口的实现吗?这个Map器的正确名称空间是什么?
这是包含以下片段的SQLMap文件:

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

我想把这些元素这样分开:
第一个SqlMap文件:

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

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

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

</mapper>

第二个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>
fnx2tebb

fnx2tebb1#

这正是我以前工作的一个项目所做的。公共片段在一个单独的文件中定义,该文件包含在主iBATIS配置文件中。
我们在根目录下有一个名为Core.ism.xml的SQLMap文件,如下所示:

<sqlMap namespace="Core" >

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

    ....

然后在我们的SQLMap文件中,我们可以这样引用它:

<include refid="Core.fragmentBasicAuditFieldNames" />

我希望我没理解错你在问什么!

u59ebvdq

u59ebvdq2#

说,你有一些

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

在另一个Map器中,您可以像这样使用它:

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

另外,您可以查看here

drnojrws

drnojrws3#

您可以通过ResultMap标记的存储库类名访问该标记,例如

... resultMap="com.example.repository.UserRepository.UserMapResult" ...

相关问题