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将文件打包成zip存放或导出
Jun 11 Java/Android
源码解读Spring-Integration执行过程
Jun 11 Java/Android
Java实现多线程聊天室
Jun 26 Java/Android
Java数组与堆栈相关知识总结
Jun 29 Java/Android
新手初学Java List 接口
Jul 07 Java/Android
java解析XML详解
Jul 09 Java/Android
用Java实现简单计算器功能
Jul 21 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
Java版 简易五子棋小游戏
May 04 Java/Android
Java数据结构之堆(优先队列)
May 20 Java/Android
一文搞懂Java中的注解和反射
Jun 21 Java/Android
Java结构型设计模式之组合模式详解
Sep 23 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中实现简单的ACL 完结篇
2011/09/07 PHP
php中实现精确设置session过期时间的方法
2014/07/17 PHP
原生JS实现Ajax通过POST方式与PHP进行交互的方法示例
2018/05/12 PHP
TP5框架简单登录功能实现方法示例
2019/10/31 PHP
Jquery 基础学习笔记之文档处理
2009/05/29 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
JavaScript四种调用模式和this示例介绍
2014/01/02 Javascript
用console.table()调试javascript
2014/09/04 Javascript
Jquery 实现弹出层插件
2015/01/28 Javascript
JavaScript使用cookie实现记住账号密码功能
2015/04/27 Javascript
简介JavaScript中的getSeconds()方法的使用
2015/06/10 Javascript
jQuery实现自动切换播放的经典滑动门效果
2015/09/12 Javascript
功能强大的jquery.validate表单验证插件
2016/11/07 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
微信小程序 空白页重定向解决办法
2017/06/27 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
关于JavaScript的单双引号嵌套问题
2017/08/20 Javascript
javascript回调函数详解
2018/02/06 Javascript
微信小程序调用摄像头隐藏式拍照功能
2018/08/22 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
详解python日志输出使用配置文件格式
2021/02/10 Python
html5+css3实现一款注册表单实例
2013/04/17 HTML / CSS
Shopee马来西亚:随拍即卖,最佳行动电商拍卖平台
2017/06/05 全球购物
美国LOGO设计公司:The Logo Company
2018/07/16 全球购物
保送生自荐信范文
2013/10/06 职场文书
师德师风建设方案
2014/05/08 职场文书
大学优秀班集体申报材料
2014/05/23 职场文书
费城故事观后感
2015/06/10 职场文书
世界上超棒的8种逻辑思维
2019/08/06 职场文书