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.
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.
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:
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:Langkah keenam ialah mencipta master Mulakan kelas DozerApppemetaanFail:
- classpath:dozer/global.dozer.xml
- classpath: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); } }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!