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内存模型之happens-before概念详解
Jun 13 Java/Android
JVM入门之类加载与字节码技术(类加载与类的加载器)
Jun 15 Java/Android
IDEA使用SpringAssistant插件创建SpringCloud项目
Jun 23 Java/Android
gateway与spring-boot-starter-web冲突问题的解决
Jul 16 Java/Android
深入解读Java三大集合之map list set的用法
Nov 11 Java/Android
SpringBoot整合阿里云视频点播的过程详解
Dec 06 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
InterProcessMutex实现zookeeper分布式锁原理
Mar 21 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Android存储中最基本的文件存储方式
Apr 30 Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
May 20 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简单生成随机数的方法
2015/07/30 PHP
PHP常用的排序和查找算法
2015/08/06 PHP
jquery ajax 同步异步的执行示例代码
2010/06/23 Javascript
JavaScript 一道字符串分解的题目
2011/08/03 Javascript
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
基于jquery &amp; json的省市区联动代码
2012/06/26 Javascript
jquery表单验证使用插件formValidator
2012/11/10 Javascript
nodejs中使用monk访问mongodb
2014/07/06 NodeJs
JavaScript闭包函数访问外部变量的方法
2014/08/27 Javascript
JS实现模拟风力的雪花飘落效果
2015/05/13 Javascript
jQuery实现动态表单验证时文本框抖动效果完整实例
2015/08/21 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
vue跨域解决方法
2017/10/15 Javascript
Bootstrap栅格系统的使用详解
2017/10/30 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
解决循环中setTimeout执行顺序的问题
2018/06/20 Javascript
JS+HTML实现的圆形可点击区域示例【3种方法】
2018/08/01 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
Vue-cli3项目引入Typescript的实现方法
2019/10/18 Javascript
python+django快速实现文件上传
2016/10/24 Python
利用Python实现颜色色值转换的小工具
2016/10/27 Python
Python算法之求n个节点不同二叉树个数
2017/10/27 Python
用Python写一个自动木马程序
2019/09/17 Python
django template实现定义临时变量,自定义赋值、自增实例
2020/07/12 Python
pycharm中选中一个单词替换所有重复单词的实现方法
2020/11/17 Python
matplotlib 使用 plt.savefig() 输出图片去除旁边的空白区域
2021/01/05 Python
Hotels.com加拿大:领先的在线住宿网站
2018/10/05 全球购物
香港最大的洋酒零售连锁店:屈臣氏酒窖(Watson’s Wine)
2018/12/10 全球购物
Chinti & Parker官网:奢华羊绒女装和创新针织设计
2021/01/01 全球购物
教育学习自我评价
2014/02/03 职场文书
我的长生果教学反思
2014/04/28 职场文书
体育教师个人工作总结
2015/02/09 职场文书
工作收入证明范本
2015/06/12 职场文书
队名及霸气口号大全
2015/12/25 职场文书
Jsonp劫持学习
2021/04/01 PHP
5个pandas调用函数的方法让数据处理更加灵活自如
2022/04/24 Python