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内存模型之happens-before概念详解
Jun 13 Java/Android
Java SSH 秘钥连接mysql数据库的方法
Jun 28 Java/Android
java基础——多线程
Jul 03 Java/Android
spring cloud 配置中心客户端启动遇到的问题
Sep 25 Java/Android
java executor包参数处理功能 
Feb 15 Java/Android
Java字符串逆序方法详情
Mar 21 Java/Android
Java中的继承、多态以及封装
Apr 11 Java/Android
Java设计模式之代理模式
Apr 22 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
JAVA springCloud项目搭建流程
May 11 Java/Android
tree shaking对打包体积优化及作用
Jul 07 Java/Android
Java代码规范与质量检测插件SonarLint的使用
Aug 05 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文章内容分页并生成相应的htm静态页面代码
2010/06/07 PHP
php导出csv数据在浏览器中输出提供下载或保存到文件的示例
2014/04/24 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
2014/05/15 PHP
php单例模式实现方法分析
2015/03/14 PHP
php生成网页桌面快捷方式
2017/05/05 PHP
PHP进阶学习之垃圾回收机制详解
2019/06/18 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
网页中返回顶部代码(多种方法)另附注释说明
2013/04/24 Javascript
JavaScript实现的GBK、UTF8字符串实际长度计算函数
2014/08/27 Javascript
浅谈Javascript变量作用域问题
2014/12/16 Javascript
简述JavaScript对传统文档对象模型的支持
2015/06/16 Javascript
js如何判断访问是来自搜索引擎(蜘蛛人)还是直接访问
2015/09/14 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
jQuery UI仿淘宝搜索下拉列表功能
2017/01/10 Javascript
基于Angularjs+mybatis实现二级评论系统(仿简书)
2017/02/13 Javascript
AngularJS2中一种button切换效果的实现方法(二)
2017/03/27 Javascript
vue-cli结合Element-ui基于cropper.js封装vue实现图片裁剪组件功能
2018/03/01 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
jQuery实现鼠标移入移出事件切换功能示例
2018/09/06 jQuery
使用typescript构建Vue应用的实现
2019/08/26 Javascript
javascript设计模式 ? 职责链模式原理与用法实例分析
2020/04/16 Javascript
centos系统升级python 2.7.3
2014/07/03 Python
用Python代码来解图片迷宫的方法整理
2015/04/02 Python
浅析Python中的赋值和深浅拷贝
2017/08/15 Python
python中使用%与.format格式化文本方法解析
2017/12/27 Python
CentOS下Python3的安装及创建虚拟环境的方法
2018/11/28 Python
python树的同构学习笔记
2019/09/14 Python
Python 字符串、列表、元组的截取与切片操作示例
2019/09/17 Python
一些关于python 装饰器的个人理解
2020/08/31 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
毕业生个人的自我评价优秀范文
2013/10/03 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
电影建国大业观后感
2015/06/01 职场文书
2016优秀护士求职自荐信
2016/01/28 职场文书
MySQL高级进阶sql语句总结大全
2022/03/16 MySQL
springboot layui hutool Excel导入的实现
2022/03/31 Java/Android