Dozer は、あるオブジェクトから別のオブジェクトにデータを再帰的にコピーする Java Bean から Java Bean マッパーです。 Dozer は 2 つのオブジェクト間で属性を変換するために使用されるツールです。このツールを使用すると、あるオブジェクトのすべての属性値を別のオブジェクトに転送するときに、set メソッドと get メソッドの繰り返し呼び出しを記述する必要がなくなります。
最も重要なことは、Dozer はデータベースの内部ドメイン オブジェクトが外部プレゼンテーション層や外部コンシューマに漏洩しないことを保証し、ドメイン オブジェクトを外部 API 呼び出しにマッピングしたり、その逆も行うこともできます。
マッピング フレームワークは、レイヤード アーキテクチャで大きな役割を果たします。特定のデータ オブジェクトへの変更をカプセル化し、これらのオブジェクトを他のレイヤーに伝達できます (つまり、 、外部サービス データ オブジェクト、ドメイン オブジェクト、データ転送オブジェクト、内部サービス データ オブジェクト) を使用して、抽象化レイヤーを作成します。マッピング フレームワークは、あるデータ オブジェクトから別のデータ オブジェクトへのデータのマッピングを担当する Mapper タイプのクラスでの使用に最適です。
分散システム アーキテクチャの場合、副作用として、異なるシステム間でドメイン オブジェクトが転送されることがあります。内部ドメイン オブジェクトが外部に公開されることも、外部ドメイン オブジェクトがシステムに侵入することも望ましくありません。
データ オブジェクト間のマッピングは、従来、オブジェクト間でデータをコピーする手動でコーディングされた値オブジェクト アセンブラ (またはコンバータ) によって解決されてきました。 Dozer は、強力で多用途、柔軟、再利用可能、構成可能なオープン ソース マッピング フレームワークとして、開発者がカスタム マッパー フレームワークを開発する時間とコストを節約します。
Dozer の Maven 座標:
<dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.5.0</version> </dependency>
使用を簡素化するために、Dozer はスターターも提供しており、その Maven 座標は次のとおりです:
<dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-spring-boot-starter</artifactId> <version>6.5.0</version> </dependency>
springboot プロジェクトで dozer マッピング フレームワークの使用を開始しましょう。プロジェクトのディレクトリ構造は次のとおりです。
最初のステップは、Maven プロジェクト dozer_demo を作成し、pom.xml ファイルを構成することです。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.hzz</groupId> <artifactId>dozer_demo</artifactId> <version>1.0-SNAPSHOT</version> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> </parent> <dependencies> <dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-spring-boot-starter</artifactId> <version>6.5.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> </dependencies> </project>
2 番目のステップは、UserDTO と UserEntity
UserDTO クラス
package com.hzz.dto; import lombok.Data; @Data public class UserDTO { private String userId; private String userName; private int userAge; private String address; private String birthday; }
UserEntity クラス
package com.hzz.entity; import lombok.Data; import java.util.Date; @Data public class UserEntity { private String id; private String name; private int age; private String address; private Date birthday; }
を作成することです。3 番目のステップは、dozer のグローバル設定ファイル global.dozer.xml# を作成することです。 ##
<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://dozermapper.github.io/schema/bean-mapping" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"> <!--全局配置:<date-format>表示日期格式--> <configuration> <date-format>yyyy-MM-dd</date-format> </configuration> </mappings>
<?xml version="1.0" encoding="UTF-8"?> <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://dozermapper.github.io/schema/bean-mapping" xsi:schemaLocation="http://dozermapper.github.io/schema/bean-mapping http://dozermapper.github.io/schema/bean-mapping.xsd"> <!--描述两个类中属性的对应关系,对于两个类中同名的属性可以不映射--> <mapping date-format="yyyy-MM-dd"> <class-a>com.hzz.entity.UserEntity</class-a> <class-b>com.hzz.dto.UserDTO</class-b> <field> <a>id</a> <b>userId</b> </field> <field> <a>name</a> <b>userName</b> </field> <field> <a>age</a> <b>userAge</b> </field> </mapping> <!-- 可以使用 map-id 指定映射的标识,在程序中通过此标识来确定使用当前这个映射关系 --> <mapping date-format="yyyy-MM-dd" map-id="user"> <class-a>com.hzz.entity.UserEntity</class-a> <class-b>com.hzz.dto.UserDTO</class-b> <field> <a>id</a> <b>userId</b> </field> <field> <a>name</a> <b>userName</b> </field> <field> <a>age</a> <b>userAge</b> </field> </mapping> </mappings>
マッピングファイル:- クラスパス:dozer/global.dozer.xml
6 番目のステップはマスターを作成することです DozerApp クラスを開始します
- クラスパス:dozer/biz.dozer.xml
package com.hzz; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DozerApp { public static void main(String[] args) { SpringApplication.run(DozerApp.class, args); } }
7 番目のステップは単体テスト DozerTest
package com.hzz; import com.github.dozermapper.core.Mapper; import com.hzz.dto.UserDTO; import com.hzz.entity.UserEntity; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest(classes = DozerApp.class) public class DozerTest { @Autowired private Mapper mapper; @Test public void testDozer() { UserDTO userDTO = new UserDTO(); userDTO.setUserId("100"); userDTO.setUserName("ls"); userDTO.setUserAge(2); userDTO.setAddress("bj"); userDTO.setBirthday("2020-07-04"); UserEntity user = mapper.map(userDTO, UserEntity.class); System.out.println(user); } @Test public void testDozer2(){ UserDTO userDTO = new UserDTO(); userDTO.setUserId("100"); userDTO.setUserName("ls"); userDTO.setUserAge(5); userDTO.setAddress("bj"); userDTO.setBirthday("2017-07-04"); UserEntity user = new UserEntity(); user.setId("200"); System.out.println(user); mapper.map(userDTO, user); System.out.println(user); //被 userDTO 覆盖了 } @Test public void testDozer3(){ UserDTO userDTO = new UserDTO(); userDTO.setUserId("100"); userDTO.setUserName("zs"); userDTO.setUserAge(3); userDTO.setAddress("bj"); UserEntity user = new UserEntity(); System.out.println(user); mapper.map(userDTO,user,"user"); //指定映射ID为user System.out.println(user); } }
以上がSpringBoot が Dozer マッピング フレームワークを統合する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。