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 相关文章推荐
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
在Java中Collection的一些常用方法总结
Jun 13 Java/Android
解决SpringBoot跨域的三种方式
Jun 26 Java/Android
如何给HttpServletRequest增加消息头
Jun 30 Java/Android
详细了解java监听器和过滤器
Jul 09 Java/Android
java中用float时,数字后面加f,这样是为什么你知道吗
Sep 04 Java/Android
Java实现学生管理系统(IO版)
Feb 24 Java/Android
Java9新特性之Module模块化编程示例演绎
Mar 16 Java/Android
JavaWeb实现显示mysql数据库数据
Mar 19 Java/Android
MyBatis配置文件解析与MyBatis实例演示
Apr 07 Java/Android
openGauss数据库JDBC环境连接配置的详细过程(Eclipse)
Jun 01 Java/Android
Spring Security动态权限的实现方法详解
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
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
PHP中的插件机制原理和实例
2014/07/08 PHP
php基础设计模式大全(注册树模式、工厂模式、单列模式)
2015/08/31 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
JS日历 推荐
2006/12/03 Javascript
跨浏览器通用、可重用的选项卡tab切换js代码
2011/09/20 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
2016/05/10 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
JS实现拖动滚动条评分的效果代码分享
2016/09/29 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
Vue.Js中的$watch()方法总结
2017/03/23 Javascript
bootstrap表格内容过长时用省略号表示的解决方法
2017/11/21 Javascript
小程序简单两栏瀑布流效果的实现
2019/12/18 Javascript
JS实现电脑虚拟键盘打字测试
2020/06/24 Javascript
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
python操作MySQL数据库具体方法
2013/10/28 Python
Python通过递归遍历出集合中所有元素的方法
2015/02/25 Python
浅谈python函数之作用域(python3.5)
2017/10/27 Python
python实现两个文件合并功能
2018/04/01 Python
Linux CentOS Python开发环境搭建教程
2018/11/28 Python
python使用minimax算法实现五子棋
2019/07/29 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
同程旅游英文网站:LY.com
2018/11/13 全球购物
生物科学系大学生的自我评价
2013/12/20 职场文书
求职信写作要突出重点
2014/01/01 职场文书
自我鉴定三原则
2014/01/13 职场文书
农村党支部先进事迹
2014/01/14 职场文书
2014年大学生预备党员思想汇报1000字
2014/09/13 职场文书
碧霞祠导游词
2015/02/09 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书