web-dev-qa-db-ja.com

複数のmapper.xmlでMyBatisResultMapを再利用する

どういうわけか同じオブジェクトを読み取るさまざまな* 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でうまく機能しますが、ここで、SELECT * FROM CLIENT、PROJECT、PROJECT.CLIENT_ID = CLIENT.IDを指定し、ClientオブジェクトがListオブジェクトとともに返されるClientWithProjectsMapper.xmlを作成します。つまり、単一のSQLでClientWithProjectsを取得したいと思います。

私のマッピングでは、ProjectMapper.xmlで定義したProjectMap(コピー/貼り付けなし)を再利用したいのですが、これを実現する方法がわかりません。

ProjectMapを別のファイルに分解することはできますが、MyBatisに他のファイルを#includeする機能が見つかりませんでした。

これをどのように行うことができるかについてのアイデアはありますか? (私はMavenを使用していますが、#includeなどを探してファイルをフィルタリングし、ファイルの内容を処理中のファイルに直接含めるプラグインはありますか?).

ありがとう。

-AP_

18
Alex Paransky

Mybatis-config.xmlファイルにすべてのマッパーxmlをインポートすると、名前空間とともにresultMap idを使用して、任意のマッパーxmlで構成されたResultMapを参照できます。

例: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"

28