首页 > 其他分享 >MapStruct使用(一)

MapStruct使用(一)

时间:2022-10-02 21:55:47浏览次数:74  
标签:driverDTO carDTO MapStruct CarDTO mapstruct carVO 使用 new

  • 官网

  • 不同的convert解决方案

名字 描述
mapstruct 基于jsr269实现在编译期间生成代码,性能高,精细控制,解耦
orika 能够精细控制,解耦
org.springframework.beans.BeanUtils体系 简单易用,不能对属性进行定制处理
  • 自己编写conver,需写大量的代码
    /**
     * 测试传统的通过getter和setter赋值完成pojo之间转换
     * CarDto-->CarVo
     */
    @Test
    public void test1() {
        // 模拟业务构造出的CarDTO对象
       CarDTO carDTO = buildCarDTO();
       // 转化dto-vo
        CarVO carVO = new CarVO();
        carVO.setId(carDTO.getId());
        carVO.setVin(carDTO.getVin());
        carVO.setPrice(carDTO.getPrice()); // 装箱拆箱机制,不需要我们自己转化
        double totalPrice = carDTO.getTotalPrice();
        DecimalFormat df = new DecimalFormat("#.00");
        String totalPriceStr = df.format(totalPrice);
        carVO.setTotalPrice(totalPriceStr);
        Date publishDate = carDTO.getPublishDate();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String publishDateFormat = sdf.format(publishDate);
        carVO.setPublishDate(publishDateFormat);
        carVO.setBrandName(carDTO.getBrand());
        List<PartDTO> partDTOS = carDTO.getPartDTOS();
        boolean hasPart = partDTOS != null && !partDTOS.isEmpty();
        carVO.setHasPart(hasPart);
        DriverVO driverVO = new DriverVO();
        DriverDTO driverDTO = carDTO.getDriverDTO();
        driverVO.setDriverId(driverDTO.getId());
        driverVO.setFullName(driverDTO.getName());
        carVO.setDriverVO(driverVO);
        System.out.println(carVO);
    }

    /**
     * 模拟业务构造出的CarDTO对象
     */
    private CarDTO buildCarDTO() {
        CarDTO carDTO = new CarDTO();
        carDTO.setId(330L);
        carDTO.setVin("vin123456789");
        carDTO.setPrice(123789.126d);
        carDTO.setTotalPrice(143789.126d);
        carDTO.setPublishDate(new Date());
        carDTO.setColor("白色");
        carDTO.setBrand("大众");
        // 零件
        PartDTO partDTO1 = new PartDTO();
        partDTO1.setPartId(1L);
        partDTO1.setPartName("多功能方向盘");
        PartDTO partDTO2 = new PartDTO();
        partDTO2.setPartId(2L);
        partDTO2.setPartName("智能车门");
        List<PartDTO> partDTOList = new ArrayList<>();
        partDTOList.add(partDTO1);
        partDTOList.add(partDTO2);
        carDTO.setPartDTOS(partDTOList);
        // 设置驾驶员
        DriverDTO driverDTO = new DriverDTO();
        driverDTO.setId(88L);
        driverDTO.setName("小明");
        carDTO.setDriverDTO(driverDTO);
        return carDTO;
    }
  • 使用MapStruct转换
# 引入依赖
    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct</artifactId>
      <version>${mapstruct.version}</version>
    </dependency>
    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-processor</artifactId>
      <version>${mapstruct.version}</version>
    </dependency>

# 编写convert
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public abstract class CarConvert {
    public static CarConvert INSTANCE = Mappers.getMapper(CarConvert.class);
    public abstract List<CarVO> dtos2vos(List<CarDTO> carDTO);
}

# 测试
    @Test
    public void test2() {
        CarDTO carDTO = buildCarDTO();
        CarVO carVO = CarConvert.INSTANCE.dto2vo(carDTO);
        System.out.println(carVO);
    }

标签:driverDTO,carDTO,MapStruct,CarDTO,mapstruct,carVO,使用,new
From: https://www.cnblogs.com/chniny/p/16749558.html

相关文章

  • slf4j、log4j2及logback使用
    slf4j、log4j2及logback使用1、问题来源之前看过关于slf4j、log4j2及logback的介绍,slf4j是门面,log4j2及logback是具体实现,仅使用slf4j门面是无法输出日志的。本文采用jd......
  • slf4j、log4j2及logback使用
    slf4j、log4j2及logback使用1、问题来源之前看过关于slf4j、log4j2及logback的介绍,slf4j是门面,log4j2及logback是具体实现,仅使用slf4j门面是无法输出日志的。本文采用jd......
  • 【Spring】SpringSecurity的使用
    4SpringSecurity只需要协助SpringSecurity创建好用户对应的角色和权限组,同时把各个资源所要求的权限信息设定好,剩下的像“登录验证”、"权限验证"等等工作都交给Spring......
  • java使用aspose插件实现word转pdf
    在业务上遇到了这种要把上传的word文件转成pdf的实现。在网上找了一堆乱七八糟的也不知道什么玩意,最后得出用aspose第三方插件实现最好,其他的都太乱了,poi插件什么的都没成......
  • 【Mac】Macbook使用的时候,桌面突然出现白条或者黑条
    输入法导致的现象:偶现,检测屏幕并没有问题可尝试以下解决办法:【option+cmmand+ESC】,按下选择【访达】,点击【重新启动】屏幕老化去苹果直营店检测屏幕问题换......
  • 一个爬虫使用教程
    前言用了\(GitHub\)上一个项目作为载体,该项目中有些代码需要修改https://github.com/dataabc/weibo-search/安装python准备工作进入\(weibo-search-master\)......
  • 使用java将数字转化为中文汉字
    在实际开发过程中,会有遇到需要将传入的数字参数转化为汉字用来展示的情况,这里给出自己的思考,供给大家参考。publicstaticvoidconvert(intnumber){//数字对......
  • 使用IDEA进行javaDoc时报错:javadoc: 错误 - 无效的标记: --source-path
    可能是因为idea版本太高其javadoc生成工具不能使用java8版本了,亦或是需要做一些设置 idea生成javadoc文件使用java8版本时报错  在这里修改一下java版本 我......
  • tushare使用
    tushare简介平台链接:https://tushare.protushare有个积分制度,具备一定积分级别的用户才能调用该等级的api。流程大概就是:注册,完善信息,然后加tushare的群。完成这个流程......
  • 为python编译C++模块时一定要注意的事情—————不要在anaconda环境下使用cmake来编
    平时搞python的人很多都会有安装C++扩展模块的需求,而往往这些C++模块都是使用CMAKE做编译配置的,但是如果你这时候shell环境是使用anaconda的话,那么cmake默认调用的GCC和G++......