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 11 Java/Android
分析设计模式之模板方法Java实现
Jun 23 Java/Android
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
mybatis中sql语句CDATA标签的用法说明
Jun 30 Java/Android
java设计模式--七大原则详解
Jul 21 Java/Android
SpringBoot+Vue+JWT的前后端分离登录认证详细步骤
Sep 25 Java/Android
解决persistence.xml配置文件修改存放路径的问题
Feb 24 Java/Android
Java数组详细介绍及相关工具类
Apr 14 Java/Android
Spring Data JPA框架Repository自定义实现
Apr 28 Java/Android
Android移动应用开发指南之六种布局详解
Sep 23 Java/Android
Android实现获取短信验证码并自动填充
May 21 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
风格模板初级不完全修改教程
2006/10/09 PHP
浅析php创建者模式
2014/11/25 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP简单实现上一页下一页功能示例
2016/09/14 PHP
PHP生成推广海报的方法分享
2018/04/22 PHP
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
javascript学习笔记(十五) js间歇调用和超时调用
2012/06/20 Javascript
让html页面不缓存js的实现方法
2014/10/31 Javascript
详解页面滚动值scrollTop在FireFox与Chrome浏览器间的兼容问题
2015/12/03 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
2015/12/13 Javascript
jQuery取消特定的click事件
2016/02/29 Javascript
javascript和jQuery中的AJAX技术详解【包含AJAX各种跨域技术】
2016/12/15 Javascript
jquery实现折叠菜单效果【推荐】
2017/03/08 Javascript
详解webpack 多页面/入口支持&amp;公共组件单独打包
2017/06/29 Javascript
Router解决跨模块下的页面跳转示例
2018/01/11 Javascript
js+canvas实现滑动拼图验证码功能
2018/03/26 Javascript
js中null与空字符串&quot;&quot;的区别讲解
2019/01/17 Javascript
详解微信小程序缓存--缓存时效性
2019/05/02 Javascript
Angular.JS读取数据库数据调用完整实例
2019/07/02 Javascript
Python查找函数f(x)=0根的解决方法
2015/05/07 Python
基python实现多线程网页爬虫
2015/09/06 Python
python3使用GUI统计代码量
2019/09/18 Python
Python3.x+迅雷x 自动下载高分电影的实现方法
2020/01/12 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
当当网官方旗舰店:中国图书销售夺金品牌
2018/04/02 全球购物
微软加拿大官方网站:Microsoft Canada
2019/04/28 全球购物
美国家居装饰店:Z Gallerie
2020/12/28 全球购物
计算机专业毕业生推荐信
2013/11/25 职场文书
安全例会汇报材料
2014/08/23 职场文书
四风问题对照检查整改措施思想报告
2014/10/05 职场文书
2014年小学安全工作总结
2014/12/04 职场文书
公司门卫岗位职责
2015/04/13 职场文书
MySQL 数据库范式化设计理论
2022/04/22 MySQL
mybatis 获取更新记录的id
2022/05/20 Java/Android