關(guān)于Java中的dozer對(duì)象轉(zhuǎn)換問題
Java中的dozer對(duì)象轉(zhuǎn)換
1、dozer介紹
Dozer是Java Bean到Java Bean映射器,它以遞歸方式將數(shù)據(jù)從一個(gè)對(duì)象復(fù)制到另一個(gè)對(duì)象。 dozer是用來對(duì)兩個(gè)對(duì)象之間屬性轉(zhuǎn)換的工具,有了這個(gè)工具之后,我們將一個(gè)對(duì)象的所有屬性值轉(zhuǎn)給另一個(gè)對(duì)象時(shí),就不需要再去寫重復(fù)的調(diào)用set和get方法了。dozer其實(shí)是對(duì)我們熟知的beanutils的封裝。
2、依賴坐標(biāo)
<dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-core</artifactId> <version>6.5.0</version> </dependency>
為了簡化使用方式,dozer還提供了starter,其maven坐標(biāo)為:
<dependency> <groupId>com.github.dozermapper</groupId> <artifactId>dozer-spring-boot-starter</artifactId> <version>6.5.0</version> </dependency>
3、創(chuàng)建測試工廠【dozer_demo】
3.1、引入對(duì)應(yīng)的依賴
<?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> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.2.2.RELEASE</version> <relativePath/> </parent> <groupId>org.example</groupId> <artifactId>dozer_demo</artifactId> <version>1.0-SNAPSHOT</version> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <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>
3.2、創(chuàng)建UserDTO和UserEntity
dto:用戶后端與前端之間的數(shù)據(jù)交互或后端之間的數(shù)據(jù)交互
entity:對(duì)應(yīng)的是數(shù)據(jù)庫列字段屬性
package com.zcl.dto; import lombok.Data; /** * 項(xiàng)目名稱:dozer_demo * 描述:用戶數(shù)據(jù)傳輸對(duì)象 * * @author zhong * @date 2022-08-29 10:41 */ @Data public class UserDTO { private String userId; private String userName; private int userAge; private String address; private String birthday; }
實(shí)際項(xiàng)目中的屬性命名可能是一致的,而下面的使用屬性故意設(shè)置為個(gè)別屬性不一致,測試屬性名不一致的時(shí)候如何進(jìn)行對(duì)象的轉(zhuǎn)換
package com.zcl.UserEntity; import lombok.Data; import java.util.Date; /** * 項(xiàng)目名稱:dozer_demo * 描述:用戶數(shù)據(jù)實(shí)體 * * @author zhong * @date 2022-08-29 10:42 */ @Data public class UserEntity { private String id; private String name; private int age; private String address; private Date birthday; }
3.3、在resources/dozer/目錄下創(chuàng)建dozer的全局配置文件global.dozer.xml
文件名稱可以自定義,該配置文件的主要作用是配置全局的一個(gè)日期時(shí)間格式統(tǒng)一
<?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>
3.4、在resources/dozer/目錄下創(chuàng)建dozer的映射文件biz.dozer.xml
該映射文件的主要作用是:將兩個(gè)JavaBean不同的屬性字段進(jìn)行描述(誰對(duì)應(yīng)誰)的映射關(guān)系
文件名稱可以自定義date-format="yyyy-MM-dd"
是上一個(gè)配置文件所定義的全局格式
下面的配置文件中通過定義配置文件的全路徑名稱來指定,如<class-a>com.itheima.entity.UserEntity</class-a>
通過field
來指定兩個(gè)對(duì)象之間的映射關(guān)系
<?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"> <!--描述兩個(gè)類中屬性的對(duì)應(yīng)關(guān)系,對(duì)于兩個(gè)類中同名的屬性可以不映射--> <mapping date-format="yyyy-MM-dd"> <class-a>com.zcl.entity.UserEntity</class-a> <class-b>com.zcl.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指定映射的標(biāo)識(shí),在程序中通過此標(biāo)識(shí)來確定使用當(dāng)前這個(gè)映射關(guān)系 --> <mapping date-format="yyyy-MM-dd" map-id="user"> <class-a>com.zcl.entity.UserEntity</class-a> <class-b>com.zcl.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>
3.5、編寫application.yml文件
如果不在配置文件中指定的化,上面編寫的兩個(gè)映射關(guān)系配置文件都不會(huì)生效
dozer: mappingFiles: - classpath:dozer/global.dozer.xml - classpath:dozer/biz.dozer.xml
3.6、編寫項(xiàng)目啟動(dòng)類
package com.zcl; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * 項(xiàng)目名稱:dozer_demo * 描述:啟動(dòng)類 * * @author zhong * @date 2022-08-29 11:01 */ @SpringBootApplication public class DozerApp { public static void main(String[] args) { SpringApplication.run(DozerApp.class, args); } }
3.7、編寫單元測試
package com.zcl.test; import com.github.dozermapper.core.Mapper; import com.zcl.DozerApp; import com.zcl.dto.UserDTO; import com.zcl.entity.UserEntity; import org.junit.jupiter.api.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; /** * 項(xiàng)目名稱:dozer_demo * 描述:測試類 * * @author zhong * @date 2022-08-29 11:03 */ @RunWith(SpringRunner.class) @SpringBootTest(classes = DozerApp.class) public class DozerTest { /** * 注入dozer通過的對(duì)象,進(jìn)行兩個(gè)對(duì)象之間的復(fù)制 */ @Autowired private Mapper mapper; @Test public void testDozer1(){ UserDTO userDTO = new UserDTO(); userDTO.setUserId("100"); userDTO.setUserName("itcast"); userDTO.setUserAge(20); userDTO.setAddress("bj"); userDTO.setBirthday("2010-11-20"); // 調(diào)用map方法進(jìn)行復(fù)制(原數(shù)據(jù),復(fù)制的目標(biāo)對(duì)象) UserEntity user = mapper.map(userDTO, UserEntity.class); System.out.println(user); // UserEntity(id=100, name=itcast, age=20, address=bj, birthday=Sat Nov 20 00:00:00 CST 2010) } @Test public void testDozer2(){ UserDTO userDTO = new UserDTO(); userDTO.setUserId("100"); userDTO.setUserName("itcast"); userDTO.setUserAge(20); userDTO.setAddress("bj"); userDTO.setBirthday("2010-11-20"); UserEntity user = new UserEntity(); user.setId("200"); System.out.println(user); // UserEntity(id=200, name=null, age=0, address=null, birthday=null) mapper.map(userDTO,user); System.out.println(user); // UserEntity(id=100, name=itcast, age=20, address=bj, birthday=Sat Nov 20 00:00:00 CST 2010) } @Test public void testDozer3(){ UserDTO userDTO = new UserDTO(); userDTO.setUserId("100"); userDTO.setUserName("itcast"); userDTO.setUserAge(20); userDTO.setAddress("bj"); UserEntity user = new UserEntity(); System.out.println(user); // UserEntity(id=null, name=null, age=0, address=null, birthday=null) mapper.map(userDTO,user,"user"); System.out.println(user); // UserEntity(id=100, name=itcast, age=20, address=bj, birthday=null) } }
到此這篇關(guān)于Java中的dozer對(duì)象轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Java dozer對(duì)象轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringDataJpa的使用之一對(duì)一、一對(duì)多、多對(duì)多?關(guān)系映射問題
這篇文章主要介紹了SpringDataJpa的使用?--?一對(duì)一、一對(duì)多、多對(duì)多關(guān)系映射,本文主要講述?@OneToOne、@OneToMany、@ManyToOne、@ManyToMany?這四個(gè)關(guān)系映射注解的使用,以及其對(duì)應(yīng)的級(jí)聯(lián)關(guān)系,需要的朋友可以參考下2022-07-07Java 前臺(tái)加后臺(tái)精品圖書管理系統(tǒng)的實(shí)現(xiàn)
相信每一個(gè)學(xué)生學(xué)編程的時(shí)候,應(yīng)該都會(huì)寫一個(gè)小項(xiàng)目——圖書管理系統(tǒng)。為什么這么說呢?我認(rèn)為一個(gè)學(xué)校的氛圍很大一部分可以從圖書館的氛圍看出來,而圖書管理系統(tǒng)這個(gè)不大不小的項(xiàng)目,接觸的多,也比較熟悉,不會(huì)有陌生感,能夠練手,又有些難度,所以我的小項(xiàng)目也來了2021-11-11Java 反射機(jī)制知識(shí)詳細(xì)介紹及總結(jié)
反射機(jī)制是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類,都能夠知道這個(gè)類的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意一個(gè)方法和屬性;這種動(dòng)態(tài)獲取的信息以及動(dòng)態(tài)調(diào)用對(duì)象的方法的功能稱為java語言的反射機(jī)制2017-01-01SpringMVC中RequestContextHolder獲取請(qǐng)求信息的方法
這篇文章主要介紹了SpringMVC中RequestContextHolder獲取請(qǐng)求信息的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04mybatis-plus配置控制臺(tái)打印完整帶參數(shù)SQL語句的實(shí)現(xiàn)
這篇文章主要介紹了mybatis-plus配置控制臺(tái)打印完整帶參數(shù)SQL語句,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08SpringBoot中使用@ControllerAdvice注解詳解
這篇文章主要介紹了SpringBoot中使用@ControllerAdvice注解詳解,@ControllerAdvice,是Spring3.2提供的新注解,它是一個(gè)Controller增強(qiáng)器,可對(duì)controller中被 @RequestMapping注解的方法加一些邏輯處理,需要的朋友可以參考下2023-10-10Java用Cookie限制點(diǎn)贊次數(shù)(簡版)
最近做了一個(gè)項(xiàng)目,其中有項(xiàng)目需求是,要用cookie實(shí)現(xiàn)限制點(diǎn)贊次數(shù),特此整理,把實(shí)現(xiàn)代碼分享給大家供大家學(xué)習(xí)2016-02-02