对象转换之modelmapper

2023-10-13 19:45
文章标签 对象 转换 modelmapper

本文主要是介绍对象转换之modelmapper,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

1. 官网地址:http://modelmapper.org

      源码地址:GitHub - modelmapper/modelmapper: Intelligent object mapping

2.实现原理:

  主要是基于匹配策略进行属性的转化,目前支持三种策略:

    2.1 Standard(默认标准规则)

    2.2 Loose  松散型

    2.3 Strict   严格匹配

3.实战:

     这里我们以springboot集成案例演示,

        方式一:Spring Boot Devtools+modelmapper

配置文件增加(需要集成springboot devtools)

    restart.include.modelmapper=/modelmapper-(.*).jar

        方式二: maven包

<dependency><groupId>org.modelmapper</groupId><artifactId>modelmapper</artifactId><version>3.1.1</version>
</dependency>

        3.1 属性映射

        3.2 类型映射继承

       3.3  校验

        3.4   配置

        3.5 转化映射

        3.6 Provider

        3.7 通用

附demo:

  public class Game {Address address;public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}
}}

public class Address {String street;String city;String address;public Address() {}public Address(String street, String city, String address) {this.street = street;this.city = city;this.address = address;}public Address(String street, String city) {this.street = street;this.city = city;}public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}public class Game {Address address;public Address getAddress() {return address;}public void setAddress(Address address) {this.address = address;}
}

public class GameDTO {String street;String city;String address;public String getStreet() {return street;}public void setStreet(String street) {this.street = street;}public String getCity() {return city;}public void setCity(String city) {this.city = city;}public String getAddress() {return address;}public void setAddress(String address) {this.address = address;}@Overridepublic String toString() {final StringBuffer sb = new StringBuffer("GameDTO{");sb.append("street='").append(street).append('\'');sb.append(", city='").append(city).append('\'');sb.append(", address='").append(address).append('\'');sb.append('}');return sb.toString();}
}

import org.junit.jupiter.api.Test;
import org.modelmapper.ModelMapper;
import org.modelmapper.PropertyMap;
import org.modelmapper.TypeMap;
import org.modelmapper.convention.MatchingStrategies;public class MainTest {@Testpublic  void testStrage() {ModelMapper modelMapper = new ModelMapper();PropertyMap<Game, GameDTO> personMap = new PropertyMap<Game, GameDTO>() {protected void configure() {map().setStreet(source.getAddress().getStreet());map(source.getAddress().city, destination.city);}};modelMapper.addMappings(personMap);//Game game=new Game();Address address=new Address();address.setStreet("street");address.setCity("city");game.setAddress(address);GameDTO gameDTO = modelMapper.map(game, GameDTO.class);System.out.println("PropertyMap="+gameDTO);//设置策略ModelMapper modelMapper1 = new ModelMapper();modelMapper1.getConfiguration().setMatchingStrategy(MatchingStrategies.STANDARD);GameDTO gameDTO1 = modelMapper1.map(game, GameDTO.class);System.out.println("STANDARD="+gameDTO1);//设置策略ModelMapper modelMapper2 = new ModelMapper();modelMapper2.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);GameDTO gameDTO2 = modelMapper2.map(game, GameDTO.class);System.out.println("STRICT="+gameDTO2);//设置策略ModelMapper modelMapper3 = new ModelMapper();modelMapper3.getConfiguration().setMatchingStrategy(MatchingStrategies.LOOSE);GameDTO gameDTO3 = modelMapper3.map(game, GameDTO.class);System.out.println("LOOSE="+gameDTO3);}//测试深度映射@Testpublic  void testDeepMapping() {ModelMapper modelMapper = new ModelMapper();TypeMap<Game, GameDTO> typeMap = modelMapper.createTypeMap(Game.class, GameDTO.class);typeMap.addMappings(mapper -> mapper.map(src ->src.getAddress().getAddress(),GameDTO::setAddress));Game game = new Game();game.setAddress(new Address("1", "John","address"));GameDTO gameDTO = modelMapper.map(game, GameDTO.class);System.out.println("dto:"+gameDTO);}//测试 skip@Testpublic  void testSkipMapping() {ModelMapper modelMapper = new ModelMapper();TypeMap<Game, GameDTO> typeMap = modelMapper.createTypeMap(Game.class, GameDTO.class);typeMap.addMappings(mapper -> mapper.skip(GameDTO::setAddress));Game game = new Game();game.setAddress(new Address("1", "John","address"));GameDTO gameDTO = modelMapper.map(game, GameDTO.class);System.out.println("dto:"+gameDTO);}//测试 skip null 属性@Testpublic  void testSkipNullMapping() {ModelMapper modelMapper = new ModelMapper();modelMapper.getConfiguration().setSkipNullEnabled(true);Game game = new Game();//Address 的address属性为空,不copygame.setAddress(new Address("1", "John",""));GameDTO gameDTO = modelMapper.map(game, GameDTO.class);System.out.println("dto:"+gameDTO);}
}

这篇关于对象转换之modelmapper的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/205458

相关文章

Javascript访问Promise对象返回值的操作方法

《Javascript访问Promise对象返回值的操作方法》这篇文章介绍了如何在JavaScript中使用Promise对象来处理异步操作,通过使用fetch()方法和Promise对象,我们可以从... 目录在Javascript中,什么是Promise1- then() 链式操作2- 在之后的代码中使

Java中数组转换为列表的两种实现方式(超简单)

《Java中数组转换为列表的两种实现方式(超简单)》本文介绍了在Java中将数组转换为列表的两种常见方法使用Arrays.asList和Java8的StreamAPI,Arrays.asList方法简... 目录1. 使用Java Collections框架(Arrays.asList)1.1 示例代码1.

MyBatis的配置对象Configuration作用及说明

《MyBatis的配置对象Configuration作用及说明》MyBatis的Configuration对象是MyBatis的核心配置对象,它包含了MyBatis运行时所需的几乎所有配置信息,这个对... 目录MyBATis配置对象Configuration作用Configuration 对象的主要作用C

Python使用PIL库将PNG图片转换为ICO图标的示例代码

《Python使用PIL库将PNG图片转换为ICO图标的示例代码》在软件开发和网站设计中,ICO图标是一种常用的图像格式,特别适用于应用程序图标、网页收藏夹图标等场景,本文将介绍如何使用Python的... 目录引言准备工作代码解析实践操作结果展示结语引言在软件开发和网站设计中,ICO图标是一种常用的图像

SpringBoot实现导出复杂对象到Excel文件

《SpringBoot实现导出复杂对象到Excel文件》这篇文章主要为大家详细介绍了如何使用Hutool和EasyExcel两种方式来实现在SpringBoot项目中导出复杂对象到Excel文件,需要... 在Spring Boot项目中导出复杂对象到Excel文件,可以利用Hutool或EasyExcel

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Java对象和JSON字符串之间的转换方法(全网最清晰)

《Java对象和JSON字符串之间的转换方法(全网最清晰)》:本文主要介绍如何在Java中使用Jackson库将对象转换为JSON字符串,并提供了一个简单的工具类示例,该工具类支持基本的转换功能,... 目录前言1. 引入 Jackson 依赖2. 创建 jsON 工具类3. 使用示例转换 Java 对象为

Python3脚本实现Excel与TXT的智能转换

《Python3脚本实现Excel与TXT的智能转换》在数据处理的日常工作中,我们经常需要将Excel中的结构化数据转换为其他格式,本文将使用Python3实现Excel与TXT的智能转换,需要的可以... 目录场景应用:为什么需要这种转换技术解析:代码实现详解核心代码展示改进点说明实战演练:从Excel到

Java中对象的创建和销毁过程详析

《Java中对象的创建和销毁过程详析》:本文主要介绍Java中对象的创建和销毁过程,对象的创建过程包括类加载检查、内存分配、初始化零值内存、设置对象头和执行init方法,对象的销毁过程由垃圾回收机... 目录前言对象的创建过程1. 类加载检查2China编程. 分配内存3. 初始化零值4. 设置对象头5. 执行

Java数字转换工具类NumberUtil的使用

《Java数字转换工具类NumberUtil的使用》NumberUtil是一个功能强大的Java工具类,用于处理数字的各种操作,包括数值运算、格式化、随机数生成和数值判断,下面就来介绍一下Number... 目录一、NumberUtil类概述二、主要功能介绍1. 数值运算2. 格式化3. 数值判断4. 随机