MapStruct入门使用案例

以下是常用的使用举例,按照需求改动即可

@Data
public class UserDO{
private int age;
private String name;
private Role role;
private String date;
} @Data
public class UserDTO{
private int dtoAge;
private String dtoName;
private Guest guest;
private Date date;
}
import org.mapstruct.*;
import org.mapstruct.factory.Mappers; @Mapper
public interface UserConvert{ UserConvert INSTANCE = Mappers.getMapper(UserConvert.class); //方式1 返回值的方式
UserDO DTOConvertDO(UserDTO dto); //方式2 参数加注解的方式
void DTOConvertDO(UserDTO dto,@MappingTarget UserDO user) //自动忽略源对象为空的值
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
UserDO DTOConvertDO(UserDTO dto); //resultType 指定返回目标类型,ignoreByDefault = true:在目标类型CarDto中忽略所有未映射的属性。
//mappingControl = MappingControl.FILTER:如果存在未匹配的属性,过滤它们而不报告错误或警
@BeanMapping(resultType = UserDO.class,ignoreByDefault = true, mappingControl = MappingControl.FILTER) UserDO DTOConvertDO(UserDTO dto); //非同名属性之间映射,指定dto的dtoName映射到Do中的name中
@Mapping(source = "dtoName",target = "name")
//条件映射,大于18岁进行映射赋值
@Mapping(condition = "java(dto.getDtoAge() >= 18)", target = "age")
//忽略指定值映射
@Mapping(source="guest",ignore=true)
void DTOConvertDO(UserDTO dto,@MappingTarget UserDO user) //非同名属性之间映射,包含其下的二层对象属性的赋值。dateFotmat指定时间格式
@Mappings({
@Mapping(source = "dtoName",target = "name"),
@Mapping(source = "dtoAge",target = "age")
@Mapping(source = "guest.name",target = "role.name")
@Mapping(source = "date",target = "date",dateFotmat="yyyy-MM-dd")
})
void DTOConvertDO(UserDTO dto,@MappingTarget UserDO user) // 当为 null 时不赋值,可以一个个设置
@Mapping(target = "dtoName", source = "name", defaultExpression = "java(null)")
void DTOConvertDO(UserDTO dto,@MappingTarget UserDO user) //集合映射
@MapMapping(valueDateFormat="yyyy-MM-dd")
void DTOConvertDO(Map<String,Date> dto,@MappingTarget Map<String,String> map)
}

注解作用:

@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE) : 忽略为null值的映射赋值

@MappingTarget : 指定赋值目标对象,赋值到哪去。

@Mapping(source = "dtoName",target = "name") : 指定映射关系,不同名的属性赋值,UserDTO下的dtoName赋值到UserDO下的name

@Mappings({

@Mapping(source = "dtoName",target = "name"),

@Mapping(source = "dtoAge",target = "age")

}) : 指定映射关系,多个时。

MapStruct入门使用的更多相关文章

  1. 高效、优雅的对象copy之MapStruct入门到精通,实战踩坑版

    一.前言 大家在开发中,最让人头疼的就是:对象之间的拷贝,前端的VO和数据库的Entity不一致! 性能最好的就是手动set,主要是枯燥且无技术含量,不仅耗费大量时间而且很容易出错: 所以我们要成为优 ...

  2. 优雅的对象转换解决方案-MapStruct及其入门(一)

    第一次看到 MapStruct 的时候, 我个人非常的开心. 因为其跟我内心里面的想法不谋而合. 1 MapStruct 是什么? 1.1 JavaBean 的困扰 对于代码中 JavaBean之间的 ...

  3. 常用开发库 - 告別BeanUtils拷贝,MapStruct工具库最全详解

    常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...

  4. 常用开发库 - MapStruct工具库详解

    常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...

  5. MapStruct对象转换

    第一次看到 MapStruct 的时候, 我个人非常的开心.因为其跟我内心里面的想法不谋而合. 1 MapStruct 是什么? 1.1 JavaBean 的困扰 对于代码中 JavaBean之间的转 ...

  6. spring boot 之使用mapstruct

    最近在阅读swagger源码,当看到 springfox.documentation.swagger2.mappers.ModelMapper 类时,无意中看到该类上面使用的 org.mapstruc ...

  7. 优雅的对象转换解决方案-MapStruct使用进阶(二)

    在前面, 介绍了 MapStruct 及其入门. 本文则是进一步的进阶. 在 MapStruct 生成对应的实现类的时候, 有如下的几个情景. 1 属性名称相同,则进行转化 在实现类的时候, 如果属性 ...

  8. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  9. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  10. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

随机推荐

  1. 干货分享:开启PWM调光之门,一起来做呼吸灯

    PWM作为一种灵活且高效的信号调制手段,在电气设备的性能控制和调节中发挥着重要作用,常用于电机控制.灯光调光.音频信号生成.加热控制等应用. 本文将以合宙低功耗4G模组经典型号--Air780E为例, ...

  2. 【昌哥IT课堂】MySQL8.3 EXPLAIN中的新JSON格式(译)

    MySQL提供了两个用于分析查询计划的强大工具:EXPLAIN和EXPLAIN ANALYZE.EXPLAIN显示优化器选择的执行计划,并在执行之前停止,而EXPLAIN ANALYZE实际执行查询并 ...

  3. RMI原理及常见反序列化攻击手法

    这是对网上一些文章和视频的再总结,可以参考以下资料,师傅们分析的都挺详细了,我这就是记录一下师傅们写的博客. 廖雪峰 - 给了简单的小例子,了解即可 B站视频(白师傅) 先知社区(小阳师傅) - 讲的 ...

  4. (Redis基础教程之八) 如何在Redis中管理Sets

    如何在ubuntu18.04上安装和保护redis 如何连接到Redis数据库 如何管理Redis数据库和Keys 如何在Redis中管理副本和客户端 如何在Redis中管理字符串 如何在Redis中 ...

  5. ClickHouse之基础使用

    [安装] [YUM] 1.添加官方存储库 sudo yum install -y yum-utils sudo yum-config-manager --add-repo https://packag ...

  6. Python3.6,3.7,3.8版本对比

    本文列举了Python3.6.3.7.3.8三个版本的新特性,学习它们有助于提高对Python的了解,跟上最新的潮流. 一.Python3.6新特性 1.新的格式化字符串方式 新的格式化字符串方式,即 ...

  7. AtCoder Beginner Contest 378

    Contest Link 还得加练. A & B & C & D 不具备任何思维含量. Submission A Submission B Submission C Submi ...

  8. springgateway 路由转发

    有些情况下,我们希望不直接访问后端地址,这个时候可以通过springgateway网关进行处理.下面只是一个简单的例子. 至于URL,变化,我们可以通过编写程序逻辑来实现. 实现步骤: 1.新建项目 ...

  9. vue3 父子组件传值

    父传子组件 <template> <div> <!-- 通过自定义属性传递值 --> <Subassembly :value="doc"/ ...

  10. DataGridView频繁更新PLC报警信息数据源

    1.问题描述 当DataGridView频繁更新数据源时,可能会导致界面闪烁.性能下降等问题.这是因为每次更新数据源时,DataGridView都需要重新绘制和绑定数据,这是一个相对耗时的过程. 2. ...