2012-11-21 3 views
12

Ich möchte ein bestimmtes aus verschiedenen * Mapper.xml-Dateien wiederverwenden, die alle irgendwie dieselben Objekte lesen.Wiederverwendung von MyBatis ResultMap in mehreren mapper.xml

Ich habe eine Datenbanktabelle namens Projekt, das ich die folgende resultMap für erstellt:

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

Es funktioniert großartig in der ProjectMapper.xml aber jetzt habe ich eine ClientWithProjectsMapper.xml erstellen möchten, wo ich will SELECT * FROM CLIENT, PROJECT wo PROJECT.CLIENT_ID = CLIENT.ID und ein Client-Objekt mit einem List-Objekte zurückgeben. Mit anderen Worten, ich möchte ein ClientWithProjects mit einem einzigen SQL.

In meiner Zuordnung möchte ich die ProjectMap (ohne Kopieren/Einfügen) wiederverwenden, die ich in der ProjectMapper.xml definiert habe, aber ich bin nicht sicher, wie dies zu erreichen ist.

Ich könnte die ProjectMap in eine separate Datei ausschließen, aber ich habe keine Einrichtungen in MyBatis gefunden, um andere Dateien aufzunehmen.

Irgendwelche Ideen, wie dies getan werden kann? (Ich benutze Maven, gibt es irgendwelche Plugins, die die Dateien filtern würden, die nach #include oder so suchen, und den Inhalt der Datei direkt in die zu verarbeitende Datei einbeziehen?).

Danke.

-AP_

+1

MyBatis erlaubt nur den Import von Eigenschaftendateien. Mapper-XML-Dateien können im Hauptkonfigurations-XML angegeben werden, aber es gibt keine Möglichkeit, ganze XML-Elemente einzubinden. Maven oder ein anderer Build-Schritt wäre erforderlich, um das endgültige XML dynamisch zu erstellen. – AngerClown

+0

Ich glaube, das ist ein Duplikat? http://stackoverflow.com/questions/6069071/mybatis-ibatis-reusable-sql-fragments-in-a-separate-sql-map-file – Andy

+0

werfen Sie einen Blick http://Stackoverflow.com/a/43356852/2762716 –

Antwort

19

Sobald Sie Sie alle Mapper xmls in Mybatis-config.xml-Datei importieren ResultMaps konfiguriert in einem der Mapper xmls mit resultMap id zusammen mit Namespace verweisen.

für Ex: 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> 

In ClientWithProjectsMapper.xml

<select id="selectProjectsByClient" parameterType="int" 
resultMap="com.mybatisapp.mappers.ProjectMapper.ProjectMap"> 
    select * from blahblah 
    </select> 

Hier können Sie resultMap in anderen Mapper XML-Dateien mit voll qualifizierten Namen als „com.mybatisapp verweisen. mappers.ProjectMapper.ProjectMap "

+0

Gibt es eine Möglichkeit, allgemeine Ergebniskarten außerhalb von Mappern zu definieren? Beispiel: Wir fügen zuerst "resultMaps.xml" ein, dann verwenden "projectMaper.xml" und "clientWithProjectsMapper.xml" die allgemeinen Ergebniszuordnungen in "resultMaps.xml". – Emerald214

Verwandte Themen