最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于Java中的dozer對象轉(zhuǎn)換問題

 更新時(shí)間:2022年08月29日 15:37:08   作者:小鐘要學(xué)習(xí)?。?!  
Dozer是Java?Bean到Java?Bean映射器,它以遞歸方式將數(shù)據(jù)從一個(gè)對象復(fù)制到另一個(gè)對象,這篇文章主要介紹了Java中的dozer對象轉(zhuǎn)換的操作方法,需要的朋友可以參考下

Java中的dozer對象轉(zhuǎn)換

1、dozer介紹

Dozer是Java Bean到Java Bean映射器,它以遞歸方式將數(shù)據(jù)從一個(gè)對象復(fù)制到另一個(gè)對象。 dozer是用來對兩個(gè)對象之間屬性轉(zhuǎn)換的工具,有了這個(gè)工具之后,我們將一個(gè)對象的所有屬性值轉(zhuǎn)給另一個(gè)對象時(shí),就不需要再去寫重復(fù)的調(diào)用set和get方法了。dozer其實(shí)是對我們熟知的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、引入對應(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:對應(yīng)的是數(shù)據(jù)庫列字段屬性

package com.zcl.dto;

import lombok.Data;

/**
 * 項(xiàng)目名稱:dozer_demo
 * 描述:用戶數(shù)據(jù)傳輸對象
 *
 * @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)行對象的轉(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)行描述(誰對應(yīng)誰)的映射關(guān)系
文件名稱可以自定義
date-format="yyyy-MM-dd"是上一個(gè)配置文件所定義的全局格式
下面的配置文件中通過定義配置文件的全路徑名稱來指定,如
<class-a>com.itheima.entity.UserEntity</class-a>
通過field來指定兩個(gè)對象之間的映射關(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è)類中屬性的對應(yīng)關(guān)系,對于兩個(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)識,在程序中通過此標(biāo)識來確定使用當(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通過的對象,進(jìn)行兩個(gè)對象之間的復(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)對象)
        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對象轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Java dozer對象轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入了解Java并發(fā)AQS的獨(dú)占鎖模式

    深入了解Java并發(fā)AQS的獨(dú)占鎖模式

    AQS是一種提供了原子式管理同步狀態(tài)、阻塞和喚醒線程功能以及隊(duì)列模型的簡單框架。一般來說,同步工具實(shí)現(xiàn)鎖的控制分為獨(dú)占鎖和共享鎖,而AQS提供了對這兩種模式的支持。本文主要來介紹一下獨(dú)占鎖模式,需要的可以參考一下
    2022-10-10
  • Java8中AbstractExecutorService與FutureTask源碼詳解

    Java8中AbstractExecutorService與FutureTask源碼詳解

    這篇文章主要給大家介紹了關(guān)于Java8中AbstractExecutorService與FutureTask的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-01-01
  • Java8新特性stream和parallelStream區(qū)別

    Java8新特性stream和parallelStream區(qū)別

    這篇文章主要介紹了Java8新特性stream和parallelStream區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • java.Net.UnknownHostException異常處理問題解決

    java.Net.UnknownHostException異常處理問題解決

    這篇文章主要介紹了java.Net.UnknownHostException異常處理方法,問題原因是在系統(tǒng)的?/etc/Hostname中配置了主機(jī)名,而在/etc/hosts文件中沒有相應(yīng)的配置,本文給大家詳細(xì)講解,需要的朋友可以參考下
    2023-03-03
  • 如何在Java中創(chuàng)建線程通信的四種方式你知道嗎

    如何在Java中創(chuàng)建線程通信的四種方式你知道嗎

    開發(fā)中不免會(huì)遇到需要所有子線程執(zhí)行完畢通知主線程處理某些邏輯的場景。或者是線程 A 在執(zhí)行到某個(gè)條件通知線程 B 執(zhí)行某個(gè)操作。下面我們來一起學(xué)習(xí)如何解決吧
    2021-09-09
  • idea項(xiàng)目debug模式啟動(dòng),斷點(diǎn)失效,斷點(diǎn)紅點(diǎn)內(nèi)無對勾問題及解決

    idea項(xiàng)目debug模式啟動(dòng),斷點(diǎn)失效,斷點(diǎn)紅點(diǎn)內(nèi)無對勾問題及解決

    這篇文章主要介紹了idea項(xiàng)目debug模式啟動(dòng),斷點(diǎn)失效,斷點(diǎn)紅點(diǎn)內(nèi)無對勾問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 通過面試題解析 Java 類加載機(jī)制

    通過面試題解析 Java 類加載機(jī)制

    類加載是 Java 語言的一個(gè)創(chuàng)新,也是 Java 語言流行的重要原因之一。它使得 Java 類可以被動(dòng)態(tài)加載到 Java 虛擬機(jī)中并執(zhí)行。下面小編和大家來一起學(xué)習(xí)一下吧
    2019-05-05
  • Springboot從配置文件properties讀取字符串亂碼的解決

    Springboot從配置文件properties讀取字符串亂碼的解決

    這篇文章主要介紹了Springboot從配置文件properties讀取字符串亂碼的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • AndroidHttpClient使用Cookie應(yīng)用分析

    AndroidHttpClient使用Cookie應(yīng)用分析

    今天想把一個(gè)用使用了HttpClient的自動(dòng)簽到小程序移植到Android上,還好Android的SDK自帶了HttpClient的包.當(dāng)然也可以繼續(xù)使用DefaultHttpClient,但用為Android定制的AndroidHttpClient自然更好
    2012-11-11
  • MyBatis Plus工具快速入門使用教程

    MyBatis Plus工具快速入門使用教程

    這篇文章主要介紹了MyBatis Plus工具快速入門使用教程,需要的朋友可以參考下
    2018-05-05

最新評論

乌审旗| 兴和县| 金坛市| 云和县| 晋城| 丹巴县| 中西区| 格尔木市| 井冈山市| 靖西县| 万山特区| 乌兰察布市| 勃利县| 铅山县| 康定县| 尤溪县| 饶阳县| 交城县| 高雄市| 新闻| 行唐县| 徐闻县| 抚州市| 临武县| 越西县| 措美县| 丹棱县| 江陵县| 高邮市| 上饶县| 木里| 花莲县| 长沙市| 敦化市| 商河县| 剑阁县| 万安县| 元阳县| 鸡西市| 广东省| 彭水|