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. 基于木舟平台浅谈surging 的热点KEY的解决方法

    一.概述 上篇文章介绍了基于surging的木舟平台如何构建起微服务,那么此篇文章将介绍基于木舟平台浅谈surging 的热点KEY的解决方法 木舟 (Kayak) 是什么? 木舟(Kayak)是基于 ...

  2. 盘点Vue3 watch的一些关键时刻能够大显身手的功能

    前言 watch这个API大家应该都不陌生,在Vue3版本中给watch增加不少有用的功能,比如deep选项支持传入数字.pause.resume.stop方法.once选项.onCleanup函数. ...

  3. Docker容器使用问题:Failed to get D-Bus connection: Operation not permitted

    原因是dbus-daemon没能启动.其实systemctl并不是不可以使用.将你的CMD或者entrypoint设置为/usr/sbin/init即可.如: docker run --privile ...

  4. common-dbutils的使用

    1.      介绍 commons-dbutils是Apache组织提供的一个开源 JDBC工具类库,能让我们更简单的使用JDBC.它是一个非常小的类包,花几分钟的时间就能掌握它的使用. 2.    ...

  5. zookeeper 分布式锁服务

    分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那一层来挡.当大量的行锁.表锁.事务充斥着数据库的时候.一般web应用很多的瓶颈都在数据库上,这里给大家介绍的是减轻数据库锁负担的一种 ...

  6. Spring常见面试问题

    Spring 1.  Spring工作机制及为什么要用? Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.Spring既是一个AOP框架,也是一IOC容器. SpringFra ...

  7. 利用 Java 实现组合式解析器

    Ward Cunningham 曾经说过,干净的代码清晰地表达了代码编写者所想要表达的东西,而优美的代码则更进一步,优美的代码看起来就像是专门为了要解决的问题而存在的.在本文中,我们将展示一个组合式解 ...

  8. golang之协程+chan通道

    [管道] 分为 有缓冲和无缓冲两种 无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的. 比如: c1:=make(chan int) 无缓冲 c2:=make(chan ...

  9. SSL免费证书之Let’s Encrypt

    官网:https://letsencrypt.org/zh-cn 官网建议使用Certbot的方式进行安装,所以首先我们需要安装Certbot Certbot) 官网:Certbot (eff.org ...

  10. CI/CD集成规范

    集成方式说明 a.用户向Gitlab提交代码,代码中包含 Dockerfile, JenkinsFile文件. b.Jenkins监听Gitlab代码库的推送和变更事件 c.Jenkins调用mave ...