Spring Dozerでマッピングするサンプル

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行目は変換後の名称です。

関連の記事

SpringBoot フォームで入力チェック(バリデーション)

△上に戻る