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 18 Java/Android
spring项目中切面及AOP的使用方法
Jun 26 Java/Android
分析Java中Map的遍历性能问题
Jun 26 Java/Android
MyBatis-Plus 批量插入数据的操作方法
Sep 25 Java/Android
解析mybatis-plus中的resultMap简单使用
Nov 23 Java/Android
使用jpa之动态插入与修改(重写save)
Nov 23 Java/Android
Mybatis-Plus进阶分页与乐观锁插件及通用枚举和多数据源详解
Mar 21 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Java存储没有重复元素的数组
Apr 29 Java/Android
Java 数组的使用
May 11 Java/Android
一文搞懂Java中的注解和反射
Jun 21 Java/Android
Java 中的 Lambda List 转 Map 的多种方法详解
Jul 07 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静态调用非静态方法的应用分析
2013/05/02 PHP
基于php socket(fsockopen)的应用实例分析
2013/06/02 PHP
php mb_substr()函数截取中文字符串应用示例
2014/07/29 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
PHP strip_tags() 去字符串中的 HTML、XML 以及 PHP 标签的函数
2016/05/22 PHP
简单谈谈 php 文件锁
2017/02/19 PHP
js直接编辑当前cookie的脚本
2008/09/14 Javascript
解决jQuery插件tipswindown与hintbox冲突
2010/11/05 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
Js中获取frames中的元素示例代码
2013/07/30 Javascript
浅谈使用MVC模式进行JavaScript程序开发
2015/11/10 Javascript
详解js私有作用域中创建特权方法
2016/01/25 Javascript
JS判断是否长按某一键的方法
2016/03/02 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
深入理解JavaScript 参数按值传递
2017/05/24 Javascript
bootstrap table sum总数量统计实现方法
2017/10/29 Javascript
AngularJS自定义过滤器用法经典实例总结
2018/05/17 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
python中WSGI是什么,Python应用WSGI详解
2017/11/24 Python
理解python中生成器用法
2017/12/20 Python
HTML的form表单和django的form表单
2019/07/25 Python
PyCharm Anaconda配置PyQt5开发环境及创建项目的教程详解
2020/03/24 Python
Python多进程multiprocessing、进程池用法实例分析
2020/03/24 Python
Django更新models数据库结构步骤
2020/04/01 Python
Python自动创建Excel并获取内容
2020/09/16 Python
奥地利网上书店:Weltbild
2017/07/14 全球购物
好莱坞百老汇御用王牌美妆:Koh Gen Do 江原道
2018/04/03 全球购物
会计专业毕业生求职信分享
2014/01/03 职场文书
办公室副主任职责范本
2014/03/08 职场文书
打架赔偿协议书范本
2014/10/26 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
pycharm 如何查看某一函数源码的快捷键
2021/05/12 Python
Python 快速验证代理IP是否有效的方法实现
2021/07/15 Python
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技
船舶调度指挥系统——助力智慧海事
2022/02/18 无线电