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 23 Java/Android
Java基于字符界面的简易收银台
Jun 26 Java/Android
elasticSearch-api的具体操作步骤讲解
Jun 28 Java/Android
Spring Boot 实现敏感词及特殊字符过滤处理
Jun 29 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
Spring实现内置监听器
Jul 09 Java/Android
小程序与后端Java接口交互实现HelloWorld入门
Jul 09 Java/Android
Java 实现限流器处理Rest接口请求详解流程
Nov 02 Java/Android
springboot+zookeeper实现分布式锁
Mar 21 Java/Android
Java版 单机五子棋
May 04 Java/Android
Android Studio实现简易进制转换计算器
May 20 Java/Android
Java中的Kotlin 内部类原理
Jun 16 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正则表达式获取内容所有链接
2015/07/24 PHP
WordPress中对访客评论功能的一些优化方法
2015/11/24 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
2019/07/12 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
取得父标签
2006/11/14 Javascript
js实现简单模态窗口,背景灰显
2008/11/14 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
js写一个字符串转成驼峰的实例
2013/06/21 Javascript
jQuery如何取id有.的值一般的方法是取不到的
2014/04/18 Javascript
包含中国城市的javascript对象实例
2015/08/03 Javascript
AngularJs bootstrap搭载前台框架——基础页面
2016/09/01 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
2016/09/08 Javascript
JS中实现隐藏部分姓名或者电话号码的代码
2018/07/17 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
JS中队列和双端队列实现及应用详解
2020/09/29 Javascript
Python备份目录及目录下的全部内容的实现方法
2016/06/12 Python
Python global全局变量函数详解
2018/09/18 Python
python使用adbapi实现MySQL数据库的异步存储
2019/03/19 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
外企测试工程师面试题
2015/02/01 面试题
在职研究生自我鉴定
2013/10/16 职场文书
工厂门卫岗位职责
2013/11/25 职场文书
电子商务网站的创业计划书
2014/01/05 职场文书
《大作家的小老师》教学反思
2014/04/16 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
2014年四风问题个人对照自查剖析材料
2014/09/15 职场文书
2015年端午节国旗下演讲稿
2015/03/19 职场文书
2015年技术工作总结范文
2015/04/20 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
导游词之南京夫子庙
2019/12/09 职场文书
字典算法实现及操作 --python(实用)
2021/03/31 Python
python中tkinter复选框使用操作
2021/11/11 Python
win10此电脑打不开怎么办 win10双击此电脑无响应的解决办法
2022/07/23 数码科技