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、Redisson处理并发问题的操作
Jun 18 Java/Android
Java中常用解析工具jackson及fastjson的使用
Jun 28 Java/Android
Java基础之线程锁相关知识总结
Jun 30 Java/Android
swagger如何返回map字段注释
Jul 03 Java/Android
Java Socket实现多人聊天系统
Jul 15 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
解析探秘fescar分布式事务实现原理
Feb 28 Java/Android
Java 深入探究讲解简单工厂模式
Apr 07 Java/Android
Java Spring Boot请求方式与请求映射过程分析
Jun 25 Java/Android
SpringBoot项目多数据源及mybatis 驼峰失效的问题解决方法
Jul 07 Java/Android
httpclient调用远程接口的方法
Aug 14 Java/Android
Mybatis 一级缓存和二级缓存原理区别
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实现框架(一)
2006/10/09 PHP
利用谷歌 Translate API制作自己的翻译脚本
2014/06/04 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
调用WordPress函数统计文章访问量及PHP原生计数器的实现
2016/03/21 PHP
Smarty变量用法详解
2016/05/11 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
PHP查找一列有序数组是否包含某值的方法
2020/02/07 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
2011/08/29 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
js数组常见操作及数组与字符串相互转化实例详解
2015/11/10 Javascript
详解使用Vue.Js结合Jquery Ajax加载数据的两种方式
2017/01/10 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
使用Fullpage插件快速开发整屏翻页的页面
2017/09/13 Javascript
详解一个基于react+webpack的多页面应用配置
2019/01/21 Javascript
详解Bootstrap 学习(一)入门
2019/04/12 Javascript
[17:36]VG战队纪录片
2014/08/21 DOTA
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
python正则表达式re之compile函数解析
2017/10/25 Python
Python实现七彩蟒蛇绘制实例代码
2018/01/16 Python
对pandas中to_dict的用法详解
2018/06/05 Python
python中提高pip install速度
2020/02/14 Python
如何使用python写截屏小工具
2020/09/29 Python
一名毕业生的自我鉴定
2013/12/04 职场文书
会计自我鉴定
2014/02/04 职场文书
教师现实表现材料
2014/02/14 职场文书
优秀应届生求职信
2014/06/16 职场文书
2014年计生标语
2014/06/23 职场文书
授权委托书范文
2014/07/31 职场文书
中秋晚会活动方案
2014/08/31 职场文书
网上祭先烈心得体会
2014/09/01 职场文书
个人总结格式范文
2015/03/09 职场文书
MySql新手入门的基本操作汇总
2021/05/13 MySQL
Python自动操作神器PyAutoGUI的使用教程
2022/06/16 Python