Rumah  >  Artikel  >  Java  >  Bagaimana SpringBoot menyepadukan rangka kerja pemetaan Dozer

Bagaimana SpringBoot menyepadukan rangka kerja pemetaan Dozer

WBOY
WBOYke hadapan
2023-05-11 21:58:04845semak imbas

1. Pengenalan Dozer

Dozer ialah pemeta Java Bean ke Java Bean yang menyalin data secara rekursif dari satu objek ke objek lain. Dozer ialah alat yang digunakan untuk menukar atribut antara dua objek Dengan alat ini, apabila kita memindahkan semua nilai atribut satu objek ke objek lain, kita tidak perlu lagi menulis panggilan berulang ke set dan mendapatkan kaedah.

Paling penting, Dozer memastikan objek domain dalaman daripada pangkalan data tidak bocor ke lapisan persembahan luaran atau pengguna luaran, dan ia juga memetakan objek domain ke panggilan API luaran dan sebaliknya.

2. Mengapa menggunakan rangka kerja pemetaan Dozer

Rangka kerja pemetaan memainkan peranan yang besar dalam seni bina berlapis Kami boleh merangkum perubahan kepada objek data tertentu dan menyebarkan objek ini ke lapisan lain ( Iaitu, perkhidmatan luaran. objek data, objek domain, objek pemindahan data, objek data perkhidmatan dalaman) untuk mencipta lapisan abstraksi. Rangka kerja pemetaan sesuai untuk digunakan dalam kelas jenis Mapper yang bertanggungjawab untuk memetakan data daripada satu objek data ke objek data yang lain.

Untuk seni bina sistem teragih, kesan sampingan ialah pemindahan objek domain antara sistem yang berbeza. Baiklah, kami tidak mahu objek domain dalaman terdedah kepada luar, dan kami juga tidak mahu objek domain luaran menyusup ke dalam sistem kami.

Pemetaan antara objek data secara tradisinya telah diselesaikan dengan pemasang objek nilai berkod tangan (atau penukar) yang menyalin data antara objek. Sebagai rangka kerja pemetaan sumber terbuka yang berkuasa, serba boleh, fleksibel, boleh digunakan semula dan boleh dikonfigurasikan, Dozer menjimatkan masa dan kos pembangun untuk membangunkan rangka kerja pemeta tersuai.

3. Penggunaan rangka kerja pemetaan Dozer

Koordinat maven Dozer:

<dependency>
    <groupId>com.github.dozermapper</groupId>
    <artifactId>dozer-core</artifactId>
    <version>6.5.0</version>
</dependency>

Untuk memudahkan penggunaan, Dozer juga menyediakan pemula, yang koordinat mavennya ialah:

<dependency>
    <groupId>com.github.dozermapper</groupId>
    <artifactId>dozer-spring-boot-starter</artifactId>
    <version>6.5.0</version>
</dependency>

Mari mula menggunakan rangka kerja pemetaan dozer dalam projek springboot. Struktur direktori projek adalah seperti yang ditunjukkan di bawah:

Bagaimana SpringBoot menyepadukan rangka kerja pemetaan Dozer

Langkah pertama ialah mencipta projek maven dozer_demo dan mengkonfigurasi fail 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>

Langkah kedua ialah mencipta UserDTO dan UserEntity

UserDTO class

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 class

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;
}

Langkah ketiga ialah mencipta fail konfigurasi global 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>

Langkah keempat, buat fail pemetaan dozer biz.dozer.xml dalam direktori resources/dozer/

<?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>

Langkah kelima, tulis application.yml fail

dozer:

pemetaanFail:
- classpath:dozer/global.dozer.xml
- classpath:dozer/biz.dozer.xml

Langkah keenam ialah mencipta master Mulakan kelas 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);
    }
}

Langkah ketujuh ialah menulis ujian unit 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);
    }
}

Atas ialah kandungan terperinci Bagaimana SpringBoot menyepadukan rangka kerja pemetaan Dozer. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam