SpringのDozerでマッピングするサンプルです。
(確認環境:Spring 5.3.7、JDK 8、STS 4 )
目次
サンプル | Dozerでマッピングする |
Dozerを使用するファイル(SyainService.java) | |
データのクラス(Syain.javaとSyainBkup.java) | |
設定ファイル(pom.xml) | |
applicationContext.xml | |
項目名が異なる箇所を変換するファイル(syain-mapping.xml) |
Dozerでマッピングする
SyainService.javaでSyainクラスのインスタンスを生成してデータをセットしDozerでSyainからSyainBkupにデータを移送します。
Dozerとは
オブジェクトから別のオブジェクトへ再帰的にデータをコピーするJava Bean to Java Beanマッパーです。詳細は公式ページ参照願います。
https://dozermapper.github.io/gitbook/
githubにコードがあります。
https://github.com/ut23405/spring5/tree/master/spring-xml-dozer
Dozerを使用するファイル(SyainService.java)
package com.example.test1;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
import com.github.dozermapper.core.Mapper;
@Service
public class SyainService {
private final Mapper dozerMapper;
public SyainService(Mapper dozerMapper) {
this.dozerMapper = dozerMapper;
}
public void copySyain() {
Syain syain = new Syain();
syain.setId("1001");
syain.setName("鈴木");
syain.setRomaji("suzuki");
List<String> list1 = new ArrayList<>();
list1.add("kihon");
list1.add("database");
syain.setShikaku(list1);
SyainBkup syainBkup = dozerMapper.map(syain, SyainBkup.class);
// syainBkup.setId(syain.getId());
// syainBkup.setName(syain.getName());
// syainBkup.setShikaku(syain.getShikaku());
System.out.println(syainBkup.getId()); //1001
System.out.println(syainBkup.getName()); //suzuki
System.out.println(syainBkup.getBkupRomaji()); //suzuki
System.out.println(syainBkup.getShikaku()); //[kihon, database]
}
}
16~23行目は、Syainクラスのインスタンスにデータをセットしています。
25行目は、mapメソッドで移送元(syain)から移送先(syainBkup)にデータをセットします。
25行目は、27~29行目と同じ意味になります。
データのクラス(Syain.javaとSyainBkup.java)
2つのクラスともデータ型と項目名は同じにしています。異なる場合は設定が必要です。
Syain.java
package com.example.test1;
import java.util.List;
public class Syain {
private String id;
private String name;
private String romaji;
private List<String> shikaku;
//** getterとsetterは省略
}
8行目は、リストです。
SyainBkup.java
package com.example.test1;
import java.util.List;
public class SyainBkup {
private String Id;
private String name;
private String bkupRomaji;
private List<String> shikaku;
//** getterとsetterは省略
}
8行目は、syainクラスの名称(romaji)と異なっています。
設定ファイル(pom.xml)
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.dozermapper/dozer-core -->
<dependency>
<groupId>com.github.dozermapper</groupId>
<artifactId>dozer-core</artifactId>
<version>6.5.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.dozermapper/dozer-spring4 -->
<dependency>
<groupId>com.github.dozermapper</groupId>
<artifactId>dozer-spring4</artifactId>
<version>6.5.2</version>
</dependency>
pom.xml設定後に「SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".」の警告が出るためクラスパスにlogback-classic-1.2.3.jarとlogback-core-1.2.3.jarも追加しました。
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan
base-package="com.example.test1" />
<bean id="dozerMapper"
class="com.github.dozermapper.spring.DozerBeanMapperFactoryBean">
<property name="mappingFiles"
value="classpath*:/*mapping.xml" />
</bean>
</beans>
16行目は、項目名が異なる箇所を変換する自作のxmlファイルを読み込みます。
項目名が異なる箇所を変換するファイル(syain-mapping.xml)
<?xml version="1.0" encoding="UTF-8"?>
<mappings xmlns="http://dozermapper.github.io/schema/bean-mapping"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd">
<mapping>
<class-a>com.example.test1.Syain</class-a>
<class-b>com.example.test1.SyainBkup</class-b>
<field>
<a>Romaji</a>
<b>bkupRomaji</b>
</field>
</mapping>
</mappings>
6行目は変換前のクラスで、7行目は変換後のクラスです。
9行目は変換前の名称で、10行目は変換後の名称です。
関連の記事