MapStruct入门使用
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入门使用的更多相关文章
- 高效、优雅的对象copy之MapStruct入门到精通,实战踩坑版
一.前言 大家在开发中,最让人头疼的就是:对象之间的拷贝,前端的VO和数据库的Entity不一致! 性能最好的就是手动set,主要是枯燥且无技术含量,不仅耗费大量时间而且很容易出错: 所以我们要成为优 ...
- 优雅的对象转换解决方案-MapStruct及其入门(一)
第一次看到 MapStruct 的时候, 我个人非常的开心. 因为其跟我内心里面的想法不谋而合. 1 MapStruct 是什么? 1.1 JavaBean 的困扰 对于代码中 JavaBean之间的 ...
- 常用开发库 - 告別BeanUtils拷贝,MapStruct工具库最全详解
常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...
- 常用开发库 - MapStruct工具库详解
常用开发库 - MapStruct工具库详解 MapStruct是一款非常实用Java工具,主要用于解决对象之间的拷贝问题,比如PO/DTO/VO/QueryParam之间的转换问题.区别于BeanU ...
- MapStruct对象转换
第一次看到 MapStruct 的时候, 我个人非常的开心.因为其跟我内心里面的想法不谋而合. 1 MapStruct 是什么? 1.1 JavaBean 的困扰 对于代码中 JavaBean之间的转 ...
- spring boot 之使用mapstruct
最近在阅读swagger源码,当看到 springfox.documentation.swagger2.mappers.ModelMapper 类时,无意中看到该类上面使用的 org.mapstruc ...
- 优雅的对象转换解决方案-MapStruct使用进阶(二)
在前面, 介绍了 MapStruct 及其入门. 本文则是进一步的进阶. 在 MapStruct 生成对应的实现类的时候, 有如下的几个情景. 1 属性名称相同,则进行转化 在实现类的时候, 如果属性 ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
随机推荐
- ElementUI Select单选切换多选无法清除历史数据的解决方案
背景: 有一个tab切换,每一个tab下都有一个 下拉框,只是一个是多选一个是单选,问题是当切换tab标签的时候,下拉框的样式不会被清空. 解决方案: 只需要在 el-select 上加一个 key ...
- 深入理解ReferenceQueue GC finalize Reference
关于对象如何销毁以及finalize更详细的信息 目录 概述 1 先看一个对象finalize的顺序问题. 2 对象再生及finalize只能执行一次 3 SoftReference WeakRefe ...
- 工作流调度系统之DolphinScheduler
Apache DolphinScheduler 是一个分布式去中心化,易扩展的可视化 DAG 工作流任务调度系统.致力于解决数据处理流程中错综复杂的依赖关系,使调度系统在数据处理流程中开箱即用. 我这 ...
- Echarts 基本使用
1.Echarts简介 ECharts 是一个使用 JavaScript 实现的开源可视化库,涵盖各行业图表,满足各种需求. ECharts 包含了以下特性: (1)丰富的可视化类型: 常规的折线图. ...
- 聊一下怎么十分钟速水CVE
题目是真的.今天晚上刚接触关于CVE的审计和提交.只能说:牛逼的是真牛逼,水的是真水. 我接下来教你,怎么在10分钟里找到一个CVE的中危漏洞并且提交.然后你就可以去咸鱼接单了,一个一铂快 打开htt ...
- Winform窗体控件双向绑定数据模拟读写PLC数据
1.用Modbus工具模拟PLC 2.创建一个实体类 点击查看代码 internal class Data : INotifyPropertyChanged { ushort[] ushorts = ...
- Linux 上使用Systemd 来进程守护Net应用
Systemd Service 的方式,用于在 Linux 系统上管理和运行服务.Systemd 是一个系统和服务管理器,可以自动化和简化 Linux 系统的管理和维护,包括启动.停止和管理后台服务. ...
- k8s pod错误的排查步骤和处理方法
查pod kubectl get pod -n amadeus -o wide 查pod日志 kubectl logs -f --timestamps -n amadeus weyo-server-6 ...
- Android 12 适配之 "Android:exported"
Android 12 适配之 "Android:exported" 将 build.gradle 中的 targetSDKVersion 和 compileSdkVersion 改 ...
- 【javaweb】【Session】记录用户访问时间
效果 Servlet import jakarta.servlet.*; import jakarta.servlet.http.*; import jakarta.servlet.annotatio ...