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各种比较对象的方式的对比总结
Jun 20 Java/Android
Springboot使用Spring Data JPA实现数据库操作
Jun 30 Java/Android
dubbo集成zipkin获取Traceid的实现
Jul 26 Java/Android
springboot中的pom文件 project报错问题
Jan 18 Java/Android
Android自定义ScrollView实现阻尼回弹
Apr 01 Java/Android
SpringBoot整合Minio文件存储
Apr 03 Java/Android
Java详细解析==和equals的区别
Apr 07 Java/Android
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
Apr 13 Java/Android
利用正则表达式匹配浮点型数据
May 30 Java/Android
springboot 全局异常处理和统一响应对象的处理方式
Jun 28 Java/Android
OpenFeign实现远程调用
Aug 14 Java/Android
HttpClient实现表单提交上传文件
Aug 14 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数组操作汇总 php数组的使用技巧
2011/07/17 PHP
解析thinkphp中的导入文件标签
2013/06/20 PHP
使用PHP导出Word文档的原理和实例
2013/10/21 PHP
更改localhost为其他名字的方法
2014/02/10 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
Jquery Ajax 学习实例2 向页面发出请求 返回JSon格式数据
2010/03/15 Javascript
放弃用你的InnerHTML来输出HTML吧 jQuery Tmpl不详细讲解
2013/04/20 Javascript
js实现简单的验证码
2015/12/25 Javascript
bootstrap 通过加减按钮实现输入框组功能
2017/11/15 Javascript
vuex 项目结构目录及一些简单配置介绍
2018/04/08 Javascript
vue实现分环境打包步骤(给不同的环境配置相对应的打包命令)
2019/06/04 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
Node如何后台数据库使用增删改查功能
2019/11/21 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
python使用pil生成缩略图的方法
2015/03/26 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
2015/12/24 Python
浅析Python中return和finally共同挖的坑
2017/08/18 Python
SVM基本概念及Python实现代码
2017/12/27 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
Python实现的三层BP神经网络算法示例
2018/02/07 Python
Python 生成 -1~1 之间的随机数矩阵方法
2018/08/04 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
创建Shapefile文件并写入数据的例子
2019/11/26 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
前端H5 Video常见使用场景简介
2020/08/21 HTML / CSS
Bootstrap File Input文件上传组件
2020/12/01 HTML / CSS
俄罗斯的精英皮具:Wittchen
2018/01/29 全球购物
.NET面试问题集
2015/12/08 面试题
申报职称专业技术个人的自我评价
2013/12/12 职场文书
暑期研修感言
2014/02/17 职场文书
学生自我评语大全
2014/04/18 职场文书
党建工作整改措施
2014/10/28 职场文书
PostgreSQL逻辑复制解密原理解析
2022/09/23 PostgreSQL