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 相关文章推荐
JVM入门之类加载与字节码技术(类加载与类的加载器)
Jun 15 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
详解Spring Boot使用系统参数表提升系统的灵活性
Jun 30 Java/Android
java固定大小队列的几种实现方式详解
Jul 15 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
关于ObjectUtils.isEmpty() 和 null 的区别
Feb 28 Java/Android
Java实现二分搜索树的示例代码
Mar 17 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
volatile保证可见性及重排序方法
Aug 05 Java/Android
spring boot实现文件上传
Aug 14 Java/Android
Android移动应用开发指南之六种布局详解
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
phpMyAdmin2.11.6安装配置方法
2008/08/24 PHP
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
PHP 常用的header头部定义汇总
2015/06/19 PHP
php精确的统计在线人数的方法
2015/10/21 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
js数组的基本操作(很全自己整理的)
2014/10/16 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
Backbone.js框架中简单的View视图编写学习笔记
2016/02/14 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
JQuery和PHP结合实现动态进度条上传显示
2016/11/23 Javascript
vue+element-ui+ajax实现一个表格的实例
2018/03/09 Javascript
layui radio单选限制下一个radio单选的实例
2019/09/03 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
Python pass 语句使用示例
2014/03/11 Python
Python读取文件内容的三种常用方式及效率比较
2017/10/07 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
Python操作rabbitMQ的示例代码
2019/03/19 Python
Django页面数据的缓存与使用的具体方法
2019/04/23 Python
python脚本执行CMD命令并返回结果的例子
2019/08/14 Python
PyQt使用QPropertyAnimation开发简单动画
2020/04/02 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
2020/06/23 Python
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
意大利网上购书网站:Libraccio.it
2021/02/03 全球购物
四年级语文教学反思
2014/02/05 职场文书
低碳生活倡议书
2014/04/14 职场文书
理财学专业自荐书
2014/06/28 职场文书
工程部主管岗位职责
2015/02/12 职场文书
党小组鉴定意见
2015/06/02 职场文书
排球赛新闻稿
2015/07/17 职场文书
PHP新手指南
2021/04/01 PHP
python opencv通过4坐标剪裁图片
2021/06/05 Python
python全面解析接口返回数据
2022/02/12 Python