亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中常見對象映射工具的使用詳解

 更新時間:2025年03月26日 10:50:30   作者:拾荒的小海螺  
對象映射是 Java 開發(fā)中的重要環(huán)節(jié),尤其在處理數(shù)據(jù)轉換時,就需要將一種結構的數(shù)據(jù)轉換為另一種結構的數(shù)據(jù)(例如 DTO 和 Entity 之間),在這篇博客中,我們將認識并解析幾種常用的對象映射工具,并提供詳細樣例,需要的朋友可以參考下

1、簡述

對象映射是 Java 開發(fā)中的重要環(huán)節(jié),尤其在處理數(shù)據(jù)轉換時,就需要將一種結構的數(shù)據(jù)轉換為另一種結構的數(shù)據(jù)(例如 DTO 和 Entity 之間)。在這篇博客中,我們將認識并解析幾種常用的對象映射工具,并提供詳細樣例。

2、對象映射工具概覽

常見的對象映射工具包括:

  • MapStruct:基于源代碼生成器的快速工具,實現(xiàn)高性能對象轉換。
  • ModelMapper:一個自動映射對象之間完全解耗的工具。
  • Dozer:一個壓力對象轉換工具,支持深度轉換和自定義規(guī)則。
  • BeanUtils:Spring 提供的基礎工具,適合處理簡單對象映射。

2.1 MapStruct

MapStruct 是一個基于源代碼生成的對象映射工具,以高性能和便捷且實現(xiàn)為人舉。它在編譯時生成代碼,需要配合規(guī)范地實現(xiàn)映射。

  • 定義 DTO 和 Entity:
public class UserDTO {
    private String name;
    private int age;
    // getter、setter
}

public class UserEntity {
    private String name;
    private int age;
    // getter、setter
}
  • 定義映射控制器:
@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

    UserDTO entityToDto(UserEntity entity);

    UserEntity dtoToEntity(UserDTO dto);
}
  • 使用映射器:
public class Main {
    public static void main(String[] args) {
        UserEntity entity = new UserEntity();
        entity.setName("John");
        entity.setAge(30);

        UserDTO dto = UserMapper.INSTANCE.entityToDto(entity);
        System.out.println(dto.getName()); // John
        System.out.println(dto.getAge());  // 30
    }
}

2.2 ModelMapper

ModelMapper 是一個自動格式化工具,適合處理復雜對象映射。

import org.modelmapper.ModelMapper;

public class Main {
    public static void main(String[] args) {
        ModelMapper modelMapper = new ModelMapper();

        UserEntity entity = new UserEntity();
        entity.setName("Alice");
        entity.setAge(25);

        UserDTO dto = modelMapper.map(entity, UserDTO.class);
        System.out.println(dto.getName()); // Alice
        System.out.println(dto.getAge());  // 25
    }
}

2.3 Dozer

Dozer 是一個壓力的 Java Bean 映射工具,支持復雜場景,例如深度屬性轉換。

  • 安裝和配置 Dozer:

在 Maven 中添加依賴:

<dependency>
    <groupId>net.sf.dozer</groupId>
    <artifactId>dozer</artifactId>
    <version>6.5.0</version>
</dependency>
  • 使用代碼:
import org.dozer.DozerBeanMapper;

public class Main {
    public static void main(String[] args) {
        DozerBeanMapper mapper = new DozerBeanMapper();

        UserEntity entity = new UserEntity();
        entity.setName("Bob");
        entity.setAge(28);

        UserDTO dto = mapper.map(entity, UserDTO.class);
        System.out.println(dto.getName()); // Bob
        System.out.println(dto.getAge());  // 28
    }
}

2.4 BeanUtils

BeanUtils 是 Spring Framework 提供的工具,實現(xiàn)簡單對象映射,適合屬性名相同且數(shù)據(jù)結構簡單的場景。

  • 添加依賴:

如果已經引入 Spring Framework,無需額外添加依賴。否則,可添加以下依賴:

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-beans</artifactId>
    <version>5.3.26</version>
</dependency>
  • 使用代碼:
import org.springframework.beans.BeanUtils;

public class Main {
    public static void main(String[] args) {
        UserEntity entity = new UserEntity();
        entity.setName("Charlie");
        entity.setAge(35);

        UserDTO dto = new UserDTO();
        BeanUtils.copyProperties(entity, dto);

        System.out.println(dto.getName()); // Charlie
        System.out.println(dto.getAge());  // 35
    }
}

注意事項:

  • BeanUtils 不支持深拷貝,只能拷貝一層屬性。
  • 屬性名必須完全匹配,否則會被忽略。
  • 適合簡單場景,復雜場景推薦使用 MapStruct 或 ModelMapper。

3、總結

在 Java 開發(fā)中,不同的對象映射工具適用于不同的場景:

  • MapStruct:適合高性能和類型安全要求高的項目,推薦用于復雜映射。
  • ModelMapper:適合自動化程度高、需要快速上手的場景,但性能稍遜。
  • Dozer:支持復雜的深層次映射,適用于需要高級自定義的場景。
  • BeanUtils:適合簡單的對象屬性復制場景,但不支持深拷貝。

選擇合適的工具需要根據(jù)項目的具體需求和場景進行權衡,希望本文的解析和示例能夠幫助您更好地理解和應用這些工具!

到此這篇關于Java中常見對象映射工具的使用詳解的文章就介紹到這了,更多相關Java對象映射工具內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Jmeter連接Mysql數(shù)據(jù)庫實現(xiàn)過程詳解

    Jmeter連接Mysql數(shù)據(jù)庫實現(xiàn)過程詳解

    這篇文章主要介紹了Jmeter連接Mysql數(shù)據(jù)庫實現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-08-08
  • java IO流 之 輸出流 OutputString()的使用

    java IO流 之 輸出流 OutputString()的使用

    這篇文章主要介紹了java IO流 之 輸出流 OutputString()的使用的相關資料,需要的朋友可以參考下
    2016-12-12
  • Java讀寫pdf文件的詳細實現(xiàn)方法

    Java讀寫pdf文件的詳細實現(xiàn)方法

    最近公司的項目中需要操作pdf文件,所以這里給大家總結下方法,這篇文章主要給大家介紹了關于Java讀寫pdf文件的詳細實現(xiàn)方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • maven工程打包引入本地jar包的實現(xiàn)

    maven工程打包引入本地jar包的實現(xiàn)

    我們需要將jar包發(fā)布到一些指定的第三方Maven倉庫,本文主要介紹了maven工程打包引入本地jar包的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • springmvc用于方法鑒權的注解攔截器的解決方案代碼

    springmvc用于方法鑒權的注解攔截器的解決方案代碼

    這篇文章主要介紹了springmvc用于方法鑒權的注解攔截器的解決方案代碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • SpringBoot集成RocketMQ實現(xiàn)消息發(fā)送的三種方式

    SpringBoot集成RocketMQ實現(xiàn)消息發(fā)送的三種方式

    RocketMQ?支持3?種消息發(fā)送方式:?同步?(sync)、異步(async)、單向(oneway),本文就將給大家介紹一下SpringBoot集成RocketMQ實現(xiàn)消息發(fā)送的三種方式文中有詳細的代碼示例,需要的朋友可以參考下
    2023-09-09
  • SpringBoot依賴管理的源碼解析

    SpringBoot依賴管理的源碼解析

    這篇文章主要介紹了SpringBoot依賴管理的源碼解析,maven提供了一套依賴管理機制,通過在pom.xml定義坐標,通過坐標從互聯(lián)網的中央倉庫下載依賴的構件(jar包),規(guī)范去管理依賴所有構件,這就叫依賴管理,需要的朋友可以參考下
    2023-04-04
  • mybatis中嵌套使用foreach需要注意的坑

    mybatis中嵌套使用foreach需要注意的坑

    在使用MyBatis進行數(shù)據(jù)庫操作時,如果需要在一個大的foreach標簽中嵌套另一個foreach,需要注意內層foreach的item屬性不能與外層重復,如果出現(xiàn)重復,會導致綁定參數(shù)時找不到正確的參數(shù),從而拋出異常
    2024-09-09
  • 簡單記事本java源碼實例

    簡單記事本java源碼實例

    這篇文章主要介紹了簡單記事本java源碼,以一個完整的實例形式分析了記事本的Java實現(xiàn)方法,對于Java應用程序的開發(fā)有一定的參考借鑒價值,需要的朋友可以參考下
    2014-11-11
  • SWT(JFace) 打印功能

    SWT(JFace) 打印功能

    SWT(JFace)體驗之打印功能
    2009-06-06

最新評論