我们能否将MyBatis XML文件导入到另一个MyBatis XML文件中?

3

我正在使用Spring和MyBatis。我尝试通过参考Can we import XML file into another XML file?来导入另一个MyBatis文件(自动生成的文件)。

1)MyTest.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd" [
        <!ENTITY BaseTest.xml SYSTEM "BaseTest.xml" >
        ]>
<mapper namespace="com.test.abc">
    &BaseTest.xml;

    <select id="CUSTOMIZED_SELECT">
    ...
    </select>
    <insert id="CUSTOMIZED_INSERT">
       ...
    </insert>
</mapper>

2) BaseTest.xml。实际上它只是一个XML片段,没有XML头部也没有外部映射元素:

<sql id="GENERAL_WHERE">
    ...
</sql>
<select id="GENERAL_SELECT">
    ...
</select>
<insert id="GENERAL_INSERT">
    ...
</insert>

这两个文件位于同一个目录下。但是Spring总是抱怨找不到BaseTest.xml。
我需要进行特殊调整吗?
顺便说一下,BaseTest.xml和MyTest.xml之间的区别是BaseTest.xml是自动生成的,而MyTest.xml是手动编写的。
谢谢!
1个回答

1

不,你不能将Mybatis XML mapper导入到另一个中。

<mapper> namespace 属性会发生什么?

一个映射器中定义的<sql>片段、<resultMap>可以从另一个映射器中引用,只需确保使用完全限定名称:namespace.id

例如:<include refid="com.test.abc.TestMapper.sqlFragementId" />

请注意,如果包含的片段还包含一个片段,则将从根映射器进行引用,因此即使在同一映射器中引用片段时,也可能需要使用完全限定名称。无论如何,保持简单的id引用允许覆盖(一种继承方式)。但是需要小心处理。


谢谢回答。我知道这可以工作,但那不是我想要的。本质上,MyBatis是一个XML文件,因此应该能够根据https://dev59.com/Tm435IYBdhLWcg3w9E9Y不变地包含另一个XML文件。 当然,我们不应在BaseTest.xml中添加<mapper namespace ...>元素。 - user1040933
我重新编辑了我的问题,包括BaseTest.xml的示例,以便更清楚明了。 - user1040933

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接