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 Nio使用NioSocket客户端与服务端交互实现方式
Jun 15 Java/Android
SpringAop日志找不到方法的处理
Jun 21 Java/Android
深入理解以DEBUG方式线程的底层运行原理
Jun 21 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
Java Kafka 消费积压监控的示例代码
Jul 01 Java/Android
在Spring-Boot中如何使用@Value注解注入集合类
Aug 02 Java/Android
Java获取e.printStackTrace()打印的信息方式
Aug 07 Java/Android
深入浅出讲解Java8函数式编程
Jan 18 Java/Android
关于EntityWrapper的in用法
Mar 22 Java/Android
Java实战之课程信息管理系统的实现
Apr 01 Java/Android
Java虚拟机内存结构及编码实战分享
Apr 07 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 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
重置版游戏视频
2020/04/09 魔兽争霸
php数组函数序列之prev() - 移动数组内部指针到上一个元素的位置,并返回该元素值
2011/10/31 PHP
CI框架装载器Loader.php源码分析
2014/11/04 PHP
PHP实现C#山寨ArrayList的方法
2015/07/16 PHP
JS 文件传参及处理技巧分析
2010/05/13 Javascript
javascript最常用与实用的创建类的代码
2010/08/12 Javascript
js自定义事件及事件交互原理概述(二)
2013/02/01 Javascript
一个简单的JS时间控件示例代码(JS时分秒时间控件)
2013/11/22 Javascript
JavaScript基本语法讲解
2015/06/03 Javascript
详解JavaScript时间格式化
2015/12/23 Javascript
如何清除IE10+ input X 文本框的叉叉和密码输入框的眼睛图标
2016/12/21 Javascript
JS基于正则表达式实现的密码强度验证功能示例
2017/09/21 Javascript
vue中axios解决跨域问题和拦截器的使用方法
2018/03/07 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
Python中将变量按行写入txt文本中的方法
2018/04/03 Python
python读取和保存视频文件
2018/04/16 Python
python实现将读入的多维list转为一维list的方法
2018/06/28 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Python List cmp()知识点总结
2019/02/18 Python
Django 静态文件配置过程详解
2019/07/23 Python
python 使用opencv 把视频分割成图片示例
2019/12/12 Python
Python实现bilibili时间长度查询的示例代码
2020/01/14 Python
PyCharm 2020.2.2 x64 下载并安装的详细教程
2020/10/15 Python
英国街头品牌:Bee Inspired Clothing
2018/02/12 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
EJB的基本架构
2016/09/22 面试题
人力资源管理专业学生自我评价
2013/11/20 职场文书
宿舍违规检讨书
2014/01/12 职场文书
意向协议书范本
2014/04/23 职场文书
干货:如何写好工作总结报告!
2019/05/10 职场文书
详解PHP用mb_string处理windows中文字符
2021/05/26 PHP
草系十大最强宝可梦,纸片人上榜,榜首大家最熟悉
2022/03/18 日漫
Java由浅入深通关抽象类与接口(下篇)
2022/04/26 Java/Android