专栏首页java闲聊modelMapper入门及使用解析

modelMapper入门及使用解析

在开发过程中经常会有一个需求,就是类型转换 (把一个类转成另一个类)modelmapper就是一个提高生产力的工具
  • 入门
  • 内置匹配器
  • 自定义匹配器
  • 源码映射解析

入门

  1. 方式1 (默认配置)
  • 导入maven依赖
<!-- http://modelmapper.org/getting-started/-->
<dependency>
     <groupId>org.modelmapper</groupId>
     <artifactId>modelmapper</artifactId>
     <version>2.3.0</version>
</dependency>
  • 新建三个实体
public class AppleVo {
    private String name ;
    private String id ;
    
}
public class Apple {
    private String id ;
    private String name ;
    private String createAge ;
}
public class AppleDTO {
    private String name ;
    private String create_age ;
}
  • 测试
    public static Apple apple;
    public static List<Apple> apples;
    
    /**
     * 模拟数据
     */
    static {
        apple = new Apple();
        apple.setName("black");
        apple.setCreateAge("22");
        apple.setId("1");
        apples = new ArrayList<>(16);
        Apple apple1 = new Apple("1", "red", "21");
        Apple apple2 = new Apple("2", "blue", "22");
        Apple apple3 = new Apple("3", "yellow", "23");
        apples.add(apple1);
        apples.add(apple2);
        apples.add(apple3);
        
    }
    /**
     *
     *  属性名保持一致,采用默认规则
     */
    public  void test1() {
        ModelMapper modelMapper = new ModelMapper();
        AppleDTO appleDto = modelMapper.map(apple, AppleDTO.class);
        System.out.println(appleDto.toString());
    }
  1. 使用内置匹配策略 官方提供了多种匹配策略,可以去官网详细了解

image.png

public  void test2() {
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.getConfiguration()
                /**  LOOSE松散策略 */
                .setMatchingStrategy(MatchingStrategies.LOOSE);
        AppleDTO appleDto = modelMapper.map(apple, AppleDTO.class);
        System.out.println(appleDto.toString());
    }
  1. 自定义映射规则
private  static  PropertyMap customField(){
    /**
     * 自定义映射规则
     */
     return  new PropertyMap<Apple, AppleDTO>() {
     @Override
            protected void configure() {
            /**使用自定义转换规则*/
            map(source.getCreateAge(),destination.getCreate_age());
        }
   };
}

 public void test4(){
        ModelMapper modelMapper = new ModelMapper();
        modelMapper.addMappings(customField()) ;
        List<AppleDTO> userDTOS = modelMapper.map(apples,new TypeToken<List<AppleDTO>>() {}.getType());
        System.out.println(userDTOS);
    }
  1. 源码映射解析

在mappermodel中,一般情况下保持属性名一致即可以不用任何配置就可直接转换,mappermodel的原理是基于反射原理进行赋值的,或是直接对成员变量赋值的,走一波debug,如图

//入口方法
public <S, D> D map(S source, Class<S> sourceType, D destination,
      TypeToken<D> destinationTypeToken, String typeMapName) {}
  //类型映射
  <S, D> D typeMap(MappingContextImpl<S, D> context, TypeMap<S, D> typeMap) {
  }

image.png

//属性赋值
private <S, D> void setDestinationValue(MappingContextImpl<S, D> context,
      MappingContextImpl<Object, Object> propertyContext, MappingImpl mapping) {}

image.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 设计模式之 原型模式

    在Java中实现原型模式十分简单,只需要实现Cloneable接口并重写clone()方法就可以了

    tanoak
  • POI之easypoi操作(二)

    tanoak
  • 享元模式

    tanoak
  • lombok系列2:lombok注解详解

    看到第一篇《初识lombok》你可能意犹未尽,本文我们按照场景来介绍一下常用的注解。

    pollyduan
  • 一份不可多得的 Lombok 学习指南

    Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(P...

    江南一点雨
  • Java高并发之设计模式

    原文出处:http://www.yund.tech/zdetail.html?type=1&id=34e52a515cd0e4d120255c90f33396a...

    大道七哥
  • Java 编程技巧之数据结构

    编写代码的"老司机"也是如此,"老司机"之所以被称为"老司机",原因也是"无他,唯手熟尔"。编码过程中踩过的坑多了,获得的编码经验也就多了,总结的编码技巧也就更...

    用户1516716
  • Java 编程技巧之数据结构

    编写代码的"老司机"也是如此,"老司机"之所以被称为"老司机",原因也是"无他,唯手熟尔"。编码过程中踩过的坑多了,获得的编码经验也就多了,总结的编码技巧也就更...

    吴延宝
  • 一份不可多得的 Lombok 学习指南

    Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(P...

    阿宝哥
  • 效率提高 10 倍 !一份不可多得的 Lombok 学习指南

    Lombok 是一款 Java 开发插件,使得 Java 开发者可以通过其定义的一些注解来消除业务工程中冗长和繁琐的代码,尤其对于简单的 Java 模型对象(P...

    黄泽杰

扫码关注云+社区

领取腾讯云代金券