mapstruct的用法之qualifiedByName示例详解


Posted in Java/Android onApril 06, 2022

qualifiedByName的意思就是使用这个Mapper接口中的指定的默认方法去处理这个属性的转换,而不是简单的get set。网上一直没找到…

可用于格式化小数位等,在po转换为vo时就已格式化小数位完成,所以不必单独再写代码处理小数位。

1 引用pom1 ,能正常使用mapstruct的注解,但不会生成Impl类

<!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-jdk8 -->
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-jdk8</artifactId>
            <version>1.2.0.Final</version>
        </dependency>

引用pom2 才会生成Impl类

2 定义ConvertMapper

package com.weather.weatherexpert.common.model.mapper;
import com.weather.weatherexpert.common.model.po.AreaPO;
import com.weather.weatherexpert.common.model.vo.AreaVO;
import org.mapstruct.MapMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.text.DecimalFormat;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 *
 */
@Mapper
public interface ConvertMapper {
    ConvertMapper INSTANCE = Mappers.getMapper(ConvertMapper.class);
    @Mapping(source = "pm25", target = "pm25", qualifiedByName = "formatDoubleDef")
    AreaVO areaPO2areaVO(AreaPO areaPO);
    @Named("formatDoubleDef")//需要起个名字,不然报错,可以与方法名一致,当然也可以不一致
    default Double formatDouble(Double source) {
        DecimalFormat decimalFormat = new DecimalFormat("0.00");//小数位格式化
        if (source == null) {
            source = 0.0;
        }
        return Double.parseDouble(decimalFormat.format(source));
    }
}

3 定义源类和目标类

public class AreaPO {
    private String cityName;
    private Integer haveAir;
    private Double pm25;
    private String pm10Str;
    ............
}
public class AreaVO {
    private String cityName;
    private Integer haveAir;
    private Double pm25;
    private String pm25Str;
    private Double pm10;
    ......    
}

4 看生成的Impl类ConvertMapperImpl

package com.weather.weatherexpert.common.model.mapper;
import com.weather.weatherexpert.common.model.po.AreaPO;
import com.weather.weatherexpert.common.model.vo.AreaVO;
public class ConvertMapperImpl implements ConvertMapper {
    public ConvertMapperImpl() {
    }
    public AreaVO areaPO2areaVO(AreaPO areaPO) {
        if (areaPO == null) {
            return null;
        } else {
            AreaVO areaVO = new AreaVO();
            areaVO.setPm25(this.formatDouble(areaPO.getPm25()));
            areaVO.setCityName(areaPO.getCityName());
            areaVO.setHaveAir(areaPO.getHaveAir());
            return areaVO;
        }
}

5 测试

AreaPO areaPO = new AreaPO("忻州", 1, 1.256879);
        AreaVO areaVO =
                ConvertMapper.INSTANCE.areaPO2areaVO(areaPO);
        logger.info("JSON.toJSONString(areaVO):" + JSON.toJSONString(areaVO));

输出:

JSON.toJSONString(areaVO):{“cityName”:“忻州”,“haveAir”:1,“pm25”:1.26}

到此这篇关于mapstruct的用法之qualifiedByName示例详解的文章就介绍到这了,更多相关mapstruct的用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Java/Android 相关文章推荐
Java框架入门之简单介绍SpringBoot框架
Jun 18 Java/Android
Java常用工具类汇总 附示例代码
Jun 26 Java/Android
Springboot配置suffix指定mvc视图的后缀方法
Jul 03 Java/Android
SpringBoot快速入门详解
Jul 21 Java/Android
Java移除无效括号的方法实现
Aug 07 Java/Android
JVM钩子函数的使用场景详解
Aug 23 Java/Android
Java spring单点登录系统
Sep 04 Java/Android
Spring-cloud Config Server的3种配置方式
Sep 25 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Spring Data JPA框架的核心概念和Repository接口
Apr 28 Java/Android
Java数据结构之堆(优先队列)
May 20 Java/Android
SpringBoot使用ip2region获取地理位置信息的方法
Jun 21 Java/Android
Spring Boot项目传参校验的最佳实践指南
springboot入门 之profile设置方式
Apr 04 #Java/Android
Java实现经典游戏泡泡堂的示例代码
Dubbo+zookeeper搭配分布式服务的过程详解
SpringBoot整合minio快速入门教程(代码示例)
Apr 03 #Java/Android
SpringBoot整合Minio文件存储
Apr 03 #Java/Android
Java中Quartz高可用定时任务快速入门
Apr 03 #Java/Android
You might like
php中变量及部分适用方法
2008/03/27 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
Nigma vs Liquid BO3 第一场2.14
2021/03/10 DOTA
JavaScript获得选中文本内容的方法
2008/12/02 Javascript
用AJAX返回HTML片段中的JavaScript脚本
2010/01/04 Javascript
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
javascript使用正则获取url上的某个参数
2014/09/04 Javascript
关于编写性能高效的javascript事件的技术
2014/11/28 Javascript
jquery实现不包含当前项的选择器实例
2015/06/25 Javascript
基于JQuery实现图片上传预览与删除操作
2016/05/24 Javascript
利用Vue.js实现checkbox的全选反选效果
2017/01/18 Javascript
前端开发之CSS原理详解
2017/03/11 Javascript
基于jQuery.i18n实现web前端的国际化
2018/05/04 jQuery
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
2018/08/20 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
JS深入学习之数组对象排序操作示例
2020/05/01 Javascript
原生js生成图片验证码
2020/10/11 Javascript
[00:57]林俊杰助阵DOTA2亚洲邀请赛
2015/01/28 DOTA
python选择排序算法实例总结
2015/07/01 Python
Python读大数据txt
2016/03/28 Python
python中reduce()函数的使用方法示例
2017/09/29 Python
python基础 range的用法解析
2019/08/23 Python
Python Pandas 转换unix时间戳方式
2019/12/07 Python
pytorch之inception_v3的实现案例
2020/01/06 Python
python读取dicom图像示例(SimpleITK和dicom包实现)
2020/01/16 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
2020/03/23 Python
用python获取txt文件中关键字的数量
2020/12/24 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
新员工欢迎词
2014/01/12 职场文书
高中生职业生涯规划书
2014/02/24 职场文书
留学生求职信
2014/06/03 职场文书
用Python进行栅格数据的分区统计和批量提取
2021/05/27 Python
python Django框架快速入门教程(后台管理)
2021/07/21 Python
Golang map映射的用法
2022/04/22 Golang