ホームページ  >  記事  >  Java  >  SpringBoot が Dozer マッピング フレームワークを統合する方法

SpringBoot が Dozer マッピング フレームワークを統合する方法

WBOY
WBOY転載
2023-05-11 21:58:04780ブラウズ

1. Dozer の概要

Dozer は、あるオブジェクトから別のオブジェクトにデータを再帰的にコピーする Java Bean から Java Bean マッパーです。 Dozer は 2 つのオブジェクト間で属性を変換するために使用されるツールです。このツールを使用すると、あるオブジェクトのすべての属性値を別のオブジェクトに転送するときに、set メソッドと get メソッドの繰り返し呼び出しを記述する必要がなくなります。

最も重要なことは、Dozer はデータベースの内部ドメイン オブジェクトが外部プレゼンテーション層や外部コンシューマに漏洩しないことを保証し、ドメイン オブジェクトを外部 API 呼び出しにマッピングしたり、その逆も行うこともできます。

2. マッピング フレームワーク Dozer を使用する理由

マッピング フレームワークは、レイヤード アーキテクチャで大きな役割を果たします。特定のデータ オブジェクトへの変更をカプセル化し、これらのオブジェクトを他のレイヤーに伝達できます (つまり、 、外部サービス データ オブジェクト、ドメイン オブジェクト、データ転送オブジェクト、内部サービス データ オブジェクト) を使用して、抽象化レイヤーを作成します。マッピング フレームワークは、あるデータ オブジェクトから別のデータ オブジェクトへのデータのマッピングを担当する Mapper タイプのクラスでの使用に最適です。

分散システム アーキテクチャの場合、副作用として、異なるシステム間でドメイン オブジェクトが転送されることがあります。内部ドメイン オブジェクトが外部に公開されることも、外部ドメイン オブジェクトがシステムに侵入することも望ましくありません。

データ オブジェクト間のマッピングは、従来、オブジェクト間でデータをコピーする手動でコーディングされた値オブジェクト アセンブラ (またはコンバータ) によって解決されてきました。 Dozer は、強力で多用途、柔軟、再利用可能、構成可能なオープン ソース マッピング フレームワークとして、開発者がカスタム マッパー フレームワークを開発する時間とコストを節約します。

3. 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 マッピング フレームワークの使用を開始しましょう。プロジェクトのディレクトリ構造は次のとおりです。

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>

4 番目のステップは、resources/dozer/ ディレクトリに dozer マッピング ファイル biz.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">
    <!--描述两个类中属性的对应关系,对于两个类中同名的属性可以不映射-->
    <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>

5 番目のステップは、アプリケーションを作成することです.yml ファイル

#dozer:
マッピングファイル:

- クラスパス:dozer/global.dozer.xml
- クラスパス:dozer/biz.dozer.xml

6 番目のステップはマスターを作成することです DozerApp クラスを開始します
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 サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。