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

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

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

1、簡述

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

2、對象映射工具概覽

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

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

2.1 MapStruct

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

  • 定義 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 提供的工具,實現簡單對象映射,適合屬性名相同且數據結構簡單的場景。

  • 添加依賴:

如果已經引入 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:適合簡單的對象屬性復制場景,但不支持深拷貝。

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

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

相關文章

  • SpringBoot實現文件上傳服務器全過程

    SpringBoot實現文件上傳服務器全過程

    該文章詳細描述了如何純手工實現一個SpringBoot文件上傳功能,包括引入必要的依賴、創(chuàng)建實體類、編寫服務層代碼、實現文件上傳邏輯以及使用Controller進行測試,通過自定義文件路徑和將文件名修改為UUID,有效避免了文件名重復的問題
    2025-12-12
  • 詳解Spring數據緩存注解@Cacheable、@CachePut、@CacheEvict

    詳解Spring數據緩存注解@Cacheable、@CachePut、@CacheEvict

    這篇文章主要介紹了詳解Spring數據緩存注解@Cacheable、CachePut、@CacheEvict,當以一組參數第一次調用某個方法時,返回值會被保存在緩存中,如果這個方法再次以相同的參數進行調用時,這個返回值會從緩存中查詢獲取,需要的朋友可以參考下
    2023-07-07
  • Java?foreach在lambda的foreach遍歷中退出操作(lambda?foreach?break)

    Java?foreach在lambda的foreach遍歷中退出操作(lambda?foreach?break)

    本文詳細講解了在Java的中,特別是在使用forEach()方法時,無法直接使用break或continue關鍵字來直接控制循環(huán)流程的問題,以及提供了三種解決方案,包括使用異常中斷、流式編程的limit()和原子布爾標志位,感興趣的朋友跟隨小編一起看看吧
    2026-05-05
  • java.lang.OutOfMemoryError: Java heap space錯誤的問題解決

    java.lang.OutOfMemoryError: Java heap space錯誤

    本文主要介紹了java.lang.OutOfMemoryError: Java heap space錯誤的問題解決,包括內存泄漏、數據過大和JVM堆大小配置不足,提供了解決方法,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • java編程中字節(jié)流轉換成字符流的實現方法

    java編程中字節(jié)流轉換成字符流的實現方法

    下面小編就為大家?guī)硪黄猨ava編程中字節(jié)流轉換成字符流的實現方法。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • MyBatis3用log4j在控制臺輸出SQL的方法示例

    MyBatis3用log4j在控制臺輸出SQL的方法示例

    本篇文章主要介紹了MyBatis3用log4j在控制臺輸出SQL的方法示例,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • 深度分析java dump文件

    深度分析java dump文件

    java內存dump是jvm運行時內存的一份快照,利用它可以分析是否存在內存浪費,可以檢查內存管理是否合理,當發(fā)生OOM的時候,可以找出問題的原因。那么dump文件的內容是什么樣的呢?
    2021-05-05
  • flink進階富函數生命周期介紹

    flink進階富函數生命周期介紹

    這篇文章主要為大家介紹了flink進階富函數生命周期的舉例介紹,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • Java實現讀取設置pdf屬性信息

    Java實現讀取設置pdf屬性信息

    這篇文章主要為大家詳細介紹了如何使用Java實現讀取設置pdf屬性信息,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2025-01-01
  • SpringBoot?@InitBinder注解綁定請求參數的過程詳解

    SpringBoot?@InitBinder注解綁定請求參數的過程詳解

    這篇文章主要介紹了SpringBoot?@InitBinder注解綁定請求參數,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04

最新評論

呼和浩特市| 安仁县| 元氏县| 开阳县| 庄浪县| 藁城市| 彭州市| 五寨县| 汕尾市| 沁源县| 田东县| 石屏县| 长春市| 潜江市| 康马县| 长丰县| 封开县| 云浮市| 孟州市| 漳浦县| 修武县| 宜春市| 大英县| 天门市| 郎溪县| 维西| 襄垣县| 木兰县| 灵石县| 景东| 崇左市| 焦作市| 陵川县| 榆林市| 贵南县| 延川县| 弥渡县| 宁南县| 二连浩特市| 张家口市| 刚察县|