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 26 Java/Android
mybatis 解决从列名到属性名的自动映射失败问题
Jun 30 Java/Android
浅谈resultMap的用法及关联结果集映射
Jun 30 Java/Android
SpringMVC 整合SSM框架详解
Aug 30 Java/Android
MyBatis-Plus 批量插入数据的操作方法
Sep 25 Java/Android
springboot中rabbitmq实现消息可靠性机制详解
Sep 25 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
springcloud整合seata
May 20 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
Jun 28 Java/Android
向Spring IOC 容器动态注册bean实现方式
Jul 15 Java/Android
OpenFeign实现远程调用
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一些有意思的小区别
2006/12/06 PHP
解决yii2左侧菜单子级无法高亮问题的方法
2016/05/08 PHP
thinkPHP框架自动填充原理与用法分析
2018/04/03 PHP
javascript 面向对象全新理练之原型继承
2009/12/03 Javascript
基于jquery的3d效果实现代码
2011/03/23 Javascript
javascript游戏开发之《三国志曹操传》零部件开发(三)情景对话中仿打字机输出文字
2013/01/23 Javascript
javascript中clone对象详解
2014/12/03 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
vue.js入门教程之基础语法小结
2016/09/01 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
微信小程序页面传值实例分析
2017/04/19 Javascript
详解如何去除vue项目中的#——History模式
2017/10/13 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
2018/03/06 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
2018/05/26 Javascript
微信{"errcode":48001,"errmsg":"api unauthorized, hints: [ req_id: 1QoCla0699ns81 ]"}
2018/10/12 Javascript
Nodejs实现多文件夹文件同步
2018/10/17 NodeJs
微信小程序通过一个json实现分享朋友圈图片
2019/09/03 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
JavaScript对象访问器Getter及Setter原理解析
2020/12/08 Javascript
python登陆asp网站页面的实现代码
2015/01/14 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
Python中zipfile压缩文件模块的基本使用教程
2020/06/14 Python
HTML5 Canvas draw方法制作动画效果示例
2013/07/11 HTML / CSS
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
美国Jeep配件购物网站:Morris 4×4 Center
2019/05/01 全球购物
如何将整数int转换成字串String
2014/03/21 面试题
什么叫做SQL注入,如何防止
2016/10/04 面试题
2015年化验室工作总结
2015/04/23 职场文书
向雷锋同志学习倡议书
2015/04/27 职场文书
交心谈心活动总结
2015/05/11 职场文书
红色经典观后感
2015/06/18 职场文书
使用Springboot实现健身房管理系统
2021/07/01 Java/Android