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 11 Java/Android
Springboot如何使用logback实现多环境配置?
Jun 16 Java/Android
Feign调用传输文件异常的解决
Jun 24 Java/Android
JavaWeb 入门:Hello Servlet
Jul 16 Java/Android
简述Java中throw-throws异常抛出
Aug 07 Java/Android
java调用Restful接口的三种方法
Aug 23 Java/Android
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
Sep 25 Java/Android
Java tomcat手动配置servlet详解
Nov 27 Java/Android
java项目构建Gradle的使用教程
Mar 24 Java/Android
Java 超详细讲解hashCode方法
Apr 07 Java/Android
Java由浅入深通关抽象类与接口(上篇)
Apr 26 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中数据的批量导入(csv文件)
2006/10/09 PHP
php中将地址生成迅雷快车旋风链接的代码[测试通过]
2011/04/20 PHP
thinkPHP多语言切换设置方法详解
2016/11/11 PHP
thinkphp实现把数据库中的列的值存到下拉框中的方法
2017/01/20 PHP
老生常谈PHP面向对象之注册表模式
2017/05/26 PHP
JQuery 学习笔记01 JQuery初接触
2010/05/06 Javascript
$.ajax返回的JSON无法执行success的解决方法
2011/09/09 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
jQuery.datatables.js插件用法及api实例详解
2016/10/28 Javascript
AngularJS中的JSONP实例解析
2016/12/01 Javascript
Bootstarp基本模版学习教程
2017/02/01 Javascript
JS去除字符串中空格的方法
2017/02/14 Javascript
基于rem的移动端响应式适配方案(详解)
2017/07/07 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
Vue表单类的父子组件数据传递示例
2018/05/03 Javascript
解决Vue.js应用回退或刷新界面时提示用户保存修改问题
2019/11/24 Javascript
springboot+vue实现文件上传下载
2020/11/17 Vue.js
[44:21]Ti4 循环赛第四日 附加赛NEWBEE vs LGD
2014/07/13 DOTA
[00:10]DOTA2 TI9勇士令状明日上线
2019/05/07 DOTA
Python中的多重装饰器
2015/04/11 Python
Python字符编码与函数的基本使用方法
2017/09/30 Python
如何在python字符串中输入纯粹的{}
2018/08/22 Python
python实现烟花小程序
2019/01/30 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
Tensorflow实现酸奶销量预测分析
2019/07/19 Python
django如何实现视图重定向
2019/07/24 Python
Python Django实现layui风格+django分页功能的例子
2019/08/29 Python
numpy.linalg.eig() 计算矩阵特征向量方式
2019/11/29 Python
python中的对数log函数表示及用法
2020/12/09 Python
安全生产标语
2014/06/06 职场文书
个人自我剖析材料
2014/09/30 职场文书
接待员岗位职责范本
2015/04/15 职场文书
中标通知书
2015/04/17 职场文书
人生遥控器观后感
2015/06/11 职场文书
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android