我们可以将MyBatis XML文件导入另一个MyBatis XML文件吗?

时间:2017-04-04 12:33:56

标签: xml mybatis spring-mybatis

我正在使用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。

我需要调整哪些特殊内容?

BTW,BaseTest.xml和MyTest.xml背后的原因是BaseTest.xml是自动生成的,MyTest.xml是手动编写的。

谢谢!

1 个答案:

答案 0 :(得分:1)

不,您无法将Mybatis XML映射器导入另一个。 如果可以:<mapper> namespace属性会发生什么?

可以从另一个映射器引用在映射器中定义的

<sql>个片段<resultMap>。只需确保使用完全限定名称:namespace.id

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

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