我想重用不同*Mapper.xml文件中的特定文件,这些文件都以某种方式读取相同的对象。
我有一个名为Project的数据库表,我为它创建了以下resultMap:
<resultMap id="ProjectMap" type="com.model.Project">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<result column="client_prj_no" jdbcType="VARCHAR" property="clientPrjNo" />
<result column="notes" jdbcType="VARCHAR" property="notes" />
<result column="start_date" jdbcType="TIMESTAMP" property="startDate" />
...
<resultMap>
它在ProjectMapper.xml中工作得很好,但是,现在我想创建一个ClientWithProjectsMapper.xml,在那里我想从CLIENT,PROJECT.CLIENT_ID=CLIENT.ID中选择*FROM CLIENT,并返回一个带有List对象的CLIENT对象。换句话说,我想获得一个具有单个SQL的ClientWithProjects。
在我的映射中,我想重用我在ProjectMapper.xml中定义的ProjectMap(无需复制/粘贴),但我不确定如何实现这一点。
我可以把ProjectMap分解成一个单独的文件,但我在MyBatis中没有找到任何可以#包括其他文件的工具。
关于如何做到这一点,有什么想法吗?(我使用的是Maven,有没有插件可以过滤寻找#include之类的文件,并将文件的内容直接包含到正在处理的文件中?)。
谢谢。
-AP_
在mybatis-config.xml文件中导入所有映射器xml后,您可以使用resultMap id和命名空间引用在任何映射器xml中配置的ResultMaps。
例如:ProjectMapper.xml
<mapper namespace="com.mybatisapp.mappers.ProjectMapper">
<resultMap id="ProjectMap" type="com.model.Project">
<id column="id" jdbcType="BIGINT" property="id" />
<result column="name" jdbcType="VARCHAR" property="name" />
<resultMap>
</mapper>
在ClientWithProjectsMapper.xml 中
<select id="selectProjectsByClient" parameterType="int"
resultMap="com.mybatisapp.mappers.ProjectMapper.ProjectMap">
select * from blahblah
</select>
在这里,您可以在另一个Mapper xml文件中引用resultMap,使用完全限定名称"com.mybatisapp.mappers.ProjectMapper.ProjectMap">