今回は、ModelMapperを利用すると、JavaBeanオブジェクト内の同一項目名・同一型のデータに値のコピーができることがわかったので、そのサンプルプログラムを共有する。
前提条件
下記記事の「IntelliJ IDEA上でSpring Bootプロジェクトの読み込み」まで完了していること。
IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...
サンプルプログラムの内容
作成したサンプルプログラムの構成は以下の通り。

なお、上記の赤枠のうち、「build.gradle」は今回変更したプログラムで、他は新規で作成したプログラムとなる。
「build.gradle」の内容は以下の通り。lombokとModelMapperを利用できるような設定を追加している。
plugins {
id 'org.springframework.boot' version '2.1.7.RELEASE'
id 'java'
}
apply plugin: 'io.spring.dependency-management'
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
//lombokを利用するための設定
compileOnly 'org.projectlombok:lombok:1.18.10'
annotationProcessor 'org.projectlombok:lombok:1.18.10'
//ModelMapperを利用するための設定
compile 'org.modelmapper:modelmapper:0.7.5'
}
DemoFormオブジェクトの内容は以下の通り。lombokを利用したJavaBeansになっている。
package com.example.demo;
import lombok.Data;
@Data
public class DemoForm {
/** ID */
private String id;
/** 名前 */
private String name;
/** 生年月日_年 */
private String birthYear;
/** 生年月日_月 */
private String birthMonth;
/** 生年月日_日 */
private String birthDay;
/** 性別 */
private String sex;
/** メモ */
private String memo;
}
UserDataオブジェクトの内容は以下の通り。lombokを利用したJavaBeansで、DemoFormオブジェクトと同じ項目値と違う項目値をもっている。
package com.example.demo;
import lombok.Data;
@Data
public class UserData {
/** ID */
private long id;
/** 名前 */
private String name;
/** 生年月日_年 */
private int birthY;
/** 生年月日_月 */
private int birthM;
/** 生年月日_日 */
private int birthD;
/** 性別 */
private String sex;
/** メモ */
private String memo;
}
「MiniTool Partition Wizard」はパーティション分割・統合・バックアップ・チェックを直感的に行える便利ツールだったハードディスクの記憶領域を論理的に分割し、分割された個々の領域のことを、パーティションといいます。 例えば、以下の図の場合、C/D...
DemoMainクラスの内容は以下の通り。ModelMapperクラスのmodelメソッドで、コピー元のJavaBeanオブジェクトと同一項目名・同一型のデータにのみ、値のコピーが行われる。
package com.example.demo;
import org.modelmapper.ModelMapper;
public class DemoMain {
public static void main(String[] args){
// コピー元のJavaBeanオブジェクト(DemoForm)を生成する
DemoForm demoForm = createDemoForm();
System.out.println("コピー元のDemoForm : " + demoForm.toString());
System.out.println();
// コピー先のJavaBeanオブジェクト(DemoForm)を生成する
DemoForm demoForm2 = new DemoForm();
System.out.println("コピー先のDemoForm(コピー前) : " + demoForm2.toString());
// コピー処理を実施
ModelMapper modelMapper = new ModelMapper();
modelMapper.map(demoForm, demoForm2);
System.out.println("コピー先のDemoForm(コピー後) : " + demoForm2.toString());
System.out.println();
// 他のコピー先のオブジェクトにもコピー処理を実施
// 同一項目名・同一型のデータにのみ、値のコピーが行われる
UserData userData = new UserData();
System.out.println("コピー先のUserData(コピー前) : " + userData.toString());
modelMapper.map(demoForm, userData);
System.out.println("コピー先のUserData(コピー後) : " + userData.toString());
}
// DemoFormオブジェクトを生成
private static DemoForm createDemoForm(){
DemoForm demoForm = new DemoForm();
demoForm.setId("1");
demoForm.setName("テスト プリン");
demoForm.setBirthYear("2012");
demoForm.setBirthMonth("1");
demoForm.setBirthDay("15");
demoForm.setSex("2");
demoForm.setMemo("登録用メモ");
return demoForm;
}
}
「DemoMain.java」の実行結果は以下の通りで、コピー元のJavaBeanオブジェクトと同一項目名・同一型のデータにのみ、値のコピーが行われることが確認できる。

要点まとめ
- ModelMapperクラスのmodelメソッドで、コピー元のJavaBeanオブジェクトと同一項目名・同一型のデータにのみ、値のコピーが行われる。





