今回は、ModelMapperを利用すると、JavaBeanオブジェクト内の同一項目名・同一型のデータに値のコピーができることがわかったので、そのサンプルプログラムを共有する。
前提条件
下記記事の「IntelliJ IDEA上でSpring Bootプロジェクトの読み込み」まで完了していること。
IntelliJ IDEA上でGradleを使ってWeb画面のSpring Bootプロジェクトを作成してみたSpring Bootのプロジェクトを新規作成を「IntelliJ IDEA」のメニューから実施しようとしたところ、無料の「Commun...
サンプルプログラムの内容
作成したサンプルプログラムの構成は以下の通り。
なお、上記の赤枠のうち、「build.gradle」は今回変更したプログラムで、他は新規で作成したプログラムとなる。
「build.gradle」の内容は以下の通り。lombokとModelMapperを利用できるような設定を追加している。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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になっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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オブジェクトと同じ項目値と違う項目値をもっている。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 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オブジェクトと同一項目名・同一型のデータにのみ、値のコピーが行われる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | 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オブジェクトと同一項目名・同一型のデータにのみ、値のコピーが行われる。