欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ModelMapper基本使用和常見場景示例詳解

 更新時間:2025年06月26日 14:52:57   作者:有夢想的攻城獅  
ModelMapper是Java對象映射庫,支持自動映射、自定義規(guī)則、集合轉(zhuǎn)換及高級配置(如匹配策略、轉(zhuǎn)換器),可集成SpringBoot,減少樣板代碼,提升開發(fā)效率,本文給大家介紹ModelMapper基本使用和常見場景,感興趣的朋友一起看看吧

ModelMapper 是一個用于簡化 Java 對象之間屬性映射的庫,它能夠自動或通過自定義規(guī)則將一個對象的屬性值映射到另一個對象中。以下是 ModelMapper 的基本使用方法和常見場景示例:

1. 添加依賴

首先,需要在項目中添加 ModelMapper 的依賴。如果你使用 Maven,可以在 pom.xml 中添加以下依賴:

<dependency>
    <groupId>org.modelmapper</groupId>
    <artifactId>modelmapper</artifactId>
    <version>3.1.1</version> <!-- 使用最新版本 -->
</dependency>

2. 基本用法

ModelMapper 的核心是 ModelMapper 類,通過它的 map 方法可以實現(xiàn)對象之間的屬性映射。

示例:簡單對象映射

假設有兩個類 SourceDestination,它們的屬性名相同:

import org.modelmapper.ModelMapper;
class Source {
    private String name;
    private int age;
    // getters and setters
}
class Destination {
    private String name;
    private int age;
    // getters and setters
}
public class Main {
    public static void main(String[] args) {
        ModelMapper modelMapper = new ModelMapper();
        Source source = new Source();
        source.setName("Alice");
        source.setAge(25);
        // 將 Source 對象映射到 Destination 對象
        Destination destination = modelMapper.map(source, Destination.class);
        System.out.println(destination.getName()); // 輸出: Alice
        System.out.println(destination.getAge());  // 輸出: 25
    }
}

3. 自定義映射規(guī)則

如果源對象和目標對象的屬性名不同,或者需要更復雜的映射邏輯,可以通過以下方式自定義:

方式 1:使用 PropertyMap

import org.modelmapper.PropertyMap;
ModelMapper modelMapper = new ModelMapper();
// 自定義映射規(guī)則
modelMapper.addMappings(new PropertyMap<Source, Destination>() {
    @Override
    protected void configure() {
        map().setUserName(source.getName()); // 將 Source 的 name 映射到 Destination 的 userName
        map().setYears(source.getAge());     // 將 Source 的 age 映射到 Destination 的 years
    }
});
Source source = new Source();
source.setName("Bob");
source.setAge(30);
Destination destination = modelMapper.map(source, Destination.class);
System.out.println(destination.getUserName()); // 輸出: Bob
System.out.println(destination.getYears());    // 輸出: 30

方式 2:使用 Lambda 表達式(ModelMapper 2.3.0+)

ModelMapper modelMapper = new ModelMapper();
// 使用 Lambda 表達式自定義映射
modelMapper.typeMap(Source.class, Destination.class)
    .addMappings(mapper -> mapper.map(src -> src.getName(), Destination::setUserName))
    .addMappings(mapper -> mapper.map(src -> src.getAge(), Destination::setYears));
Destination destination = modelMapper.map(source, Destination.class);

4. 集合映射

ModelMapper 也支持集合類型的映射,例如將 List<Source> 映射為 List<Destination>

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
List<Source> sources = Arrays.asList(
    new Source("Alice", 25),
    new Source("Bob", 30)
);
// 方法 1:使用 Stream 和 map
List<Destination> destinations = sources.stream()
    .map(source -> modelMapper.map(source, Destination.class))
    .collect(Collectors.toList());
// 方法 2:直接映射集合(ModelMapper 2.3.0+)
List<Destination> destinations2 = modelMapper.map(sources, new TypeToken<List<Destination>>() {}.getType());

5. 高級配置

匹配策略

ModelMapper 提供了多種匹配策略,例如:

  • STRICT:嚴格匹配(默認),屬性名和類型必須完全一致。
  • LOOSE:寬松匹配,屬性名可以部分匹配。
  • STANDARD:標準匹配,支持駝峰命名轉(zhuǎn)換。
modelMapper.getConfiguration()
    .setMatchingStrategy(MatchingStrategies.LOOSE); // 使用寬松匹配

忽略某些屬性

modelMapper.typeMap(Source.class, Destination.class)
    .addMappings(mapper -> mapper.skip(Destination::setAge)); // 忽略 age 屬性的映射

自定義轉(zhuǎn)換器

如果需要將屬性值進行轉(zhuǎn)換(例如日期格式化),可以使用 Converter

import org.modelmapper.Converter;
import org.modelmapper.spi.MappingContext;
Converter<String, Date> stringToDateConverter = ctx -> {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try {
        return sdf.parse(ctx.getSource());
    } catch (ParseException e) {
        throw new RuntimeException(e);
    }
};
modelMapper.addConverter(stringToDateConverter);

6. 在 Spring Boot 中使用

在 Spring Boot 項目中,可以將 ModelMapper 配置為 Bean:

import org.modelmapper.ModelMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
    @Bean
    public ModelMapper modelMapper() {
        return new ModelMapper();
    }
}

然后在 Service 或 Controller 中注入使用:

import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
    @Autowired
    private ModelMapper modelMapper;
    public Destination convertToDestination(Source source) {
        return modelMapper.map(source, Destination.class);
    }
}

總結

ModelMapper 的核心功能包括:

  1. 自動映射:根據(jù)屬性名和類型自動映射。
  2. 自定義映射:通過 PropertyMap 或 Lambda 表達式自定義映射規(guī)則。
  3. 集合映射:支持 ListSet 等集合類型的映射。
  4. 高級配置:支持匹配策略、忽略屬性、自定義轉(zhuǎn)換器等。
  5. Spring 集成:可以輕松集成到 Spring Boot 項目中。

通過 ModelMapper,可以大大減少對象映射的樣板代碼,提高開發(fā)效率。

到此這篇關于ModelMapper基本使用和常見場景示例詳解的文章就介紹到這了,更多相關ModelMapper使用內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Boot Web 開發(fā)注解篇

    Spring Boot Web 開發(fā)注解篇

    在 Spring Boot 快速入門中,只要在 pom.xml 加入了 spring-boot-starter-web 依賴,即可快速開發(fā) web 應用。下文給大家詳細介紹了spring boot web 開發(fā)注解,感興趣的朋友參考下吧
    2017-08-08
  • maven項目在svn中的上傳與檢出的方法

    maven項目在svn中的上傳與檢出的方法

    企業(yè)開發(fā)中經(jīng)常使用svn來為我們控制代碼版本,也經(jīng)常使用maven來管理項目。下面將介紹一下如何將maven項目上傳到svn中,如何將項目從svn中檢出,感興趣的小伙伴們可以參考一下
    2019-02-02
  • JavaWeb Refresh響應頭代碼實例詳解

    JavaWeb Refresh響應頭代碼實例詳解

    這篇文章主要介紹了JavaWeb Refresh響應頭代碼實例詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • Java實現(xiàn)導出Word文檔的示例代碼

    Java實現(xiàn)導出Word文檔的示例代碼

    poi-tl是一個基于Apache POI的Word模板引擎,也是一個免費開源的Java類庫,你可以非常方便的加入到你的項目中。本文就利用它實現(xiàn)導出Word文檔功能,需要的可以參考一下
    2023-02-02
  • Java多線程中wait、notify、notifyAll使用詳解

    Java多線程中wait、notify、notifyAll使用詳解

    這篇文章主要介紹了Java多線程中wait、notify、notifyAll使用詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • SpringBoot整合SSO(single sign on)單點登錄

    SpringBoot整合SSO(single sign on)單點登錄

    這篇文章主要介紹了SpringBoot整合SSO(single sign on)單點登錄,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java中equals()方法的理解與使用方法例子

    Java中equals()方法的理解與使用方法例子

    本文主要介紹了Java中的equals()方法,equals()方法是Object類的方法,用于比較兩個對象是否相等,文中通過代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-10-10
  • SpringBoot快速實現(xiàn)接口消息加密的過程詳解

    SpringBoot快速實現(xiàn)接口消息加密的過程詳解

    在項目中,為了保證數(shù)據(jù)的安全,我們常常會對傳遞的數(shù)據(jù)進行加密,常用的加密算法包括對稱加密(AES)和非對稱加密(RSA),博主選取碼云上最簡單的API加密項目進行下面的講解,需要的朋友可以參考下
    2023-11-11
  • 全面分析Java文件上傳

    全面分析Java文件上傳

    本片文章給大家詳細分析了Java文件上傳的相關知識點,以及相關代碼做了詳細分析,有興趣的朋友學習下。
    2018-02-02
  • RESTful?API設計原則與實現(xiàn)示例詳解

    RESTful?API設計原則與實現(xiàn)示例詳解

    這篇文章主要為大家介紹了RESTful?API設計原則與實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04

最新評論