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 相关文章推荐
SpringBoot集成Redis,并自定义对象序列化操作
Jun 22 Java/Android
Netty结合Protobuf进行编解码的方法
Jun 26 Java/Android
Java elasticsearch安装以及部署教程
Jun 28 Java/Android
jackson json序列化实现首字母大写,第二个字母需小写
Jun 29 Java/Android
Java实现多文件上传功能
Jun 30 Java/Android
maven依赖的version声明控制方式
Jan 18 Java/Android
JVM之方法返回地址详解
Feb 28 Java/Android
Java字符串逆序方法详情
Mar 21 Java/Android
SpringBoot中使用Redis作为全局锁示例过程
Mar 24 Java/Android
Java 垃圾回收超详细讲解记忆集和卡表
Apr 08 Java/Android
Java 多线程协作作业之信号同步
May 11 Java/Android
SpringBoot全局异常处理方案分享
May 25 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中的string类型使用说明
2010/07/27 PHP
PHP使用Mysql事务实例解析
2014/09/08 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
PHP中header函数的用法及其注意事项详解
2016/06/13 PHP
PHP随机获取未被微信屏蔽的域名(微信域名检测)
2017/03/19 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
JavaScript作用域链使用介绍
2013/08/29 Javascript
javascript中的作用域和上下文使用简要概述
2013/12/05 Javascript
js取模(求余数)隔行变色
2014/05/15 Javascript
Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法
2014/09/01 Javascript
jQuery源码分析之jQuery中的循环技巧详解
2014/09/06 Javascript
纯js实现仿QQ邮箱弹出确认框
2015/04/29 Javascript
Angularjs整合微信UI(weui)
2016/03/15 Javascript
Vue.js 中的 $watch使用方法
2017/05/25 Javascript
JavaScript ES6中const、let与var的对比详解
2017/06/18 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
不使用JavaScript实现菜单的打开和关闭效果demo
2018/05/01 Javascript
实例解析Vue.js下载方式及基本概念
2018/05/11 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
JavaScript函数式编程(Functional Programming)纯函数用法分析
2019/05/22 Javascript
Python自动化构建工具scons使用入门笔记
2015/03/10 Python
使用Python标准库中的wave模块绘制乐谱的简单教程
2015/03/30 Python
Python 模块EasyGui详细介绍
2017/02/19 Python
django主动抛出403异常的方法详解
2019/01/04 Python
对Python Pexpect 模块的使用说明详解
2019/02/14 Python
CSS3实现网站商品展示效果图
2020/01/18 HTML / CSS
经典优秀个人求职自荐信格式
2013/09/25 职场文书
公司领导九九重阳节发言稿2014
2014/09/25 职场文书
运动会广播稿200字
2014/10/18 职场文书
世界红十字日活动总结
2015/02/10 职场文书
幼儿园园长安全责任书
2015/05/08 职场文书
2015年银行个人工作总结
2015/05/14 职场文书
2015年企业团支部工作总结
2015/05/21 职场文书
电话营销开场白
2015/05/29 职场文书
正规欠条模板
2015/07/03 职场文书