首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Lombok `@With`注释时的Mapstruct升级

Lombok是一个Java库,它通过注解来简化Java代码的编写。其中,@With注解是Lombok库中的一个注解,用于生成一个新的对象,该对象与原始对象相同,只是某些属性值发生了变化。

Mapstruct是一个Java注解处理器,用于简化Java Bean之间的映射。它可以自动生成映射代码,减少手动编写映射代码的工作量。

在使用Lombok的@With注解时,结合Mapstruct进行升级,可以实现更便捷的对象映射和属性更新。

具体步骤如下:

  1. 首先,确保项目中已经引入了Lombok和Mapstruct的依赖。
  2. 在需要使用@With注解的类上添加@Builder注解,以便生成Builder模式的构造器。
  3. 在需要进行属性映射的类上添加@Mapper注解,指定映射器的组件模型。
  4. 在映射器接口中定义映射方法,使用@Mapping注解指定属性之间的映射关系。
  5. 在需要进行属性更新的方法上添加@With注解,指定需要更新的属性。
  6. 在映射器接口中定义一个默认方法,用于执行属性更新操作。方法参数为原始对象和需要更新的属性。
  7. 在默认方法中,使用@MappingTarget注解指定需要更新的属性对象,并调用@With注解所在方法进行属性更新。

下面是一个示例代码:

代码语言:txt
复制
import lombok.Builder;
import lombok.Value;
import lombok.With;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.MappingTarget;
import org.mapstruct.factory.Mappers;

@Value
@Builder
class User {
    String name;
    int age;
}

@Mapper
interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

    @Mapping(target = "name", source = "username")
    User toUser(UserDto userDto);

    @With
    void updateUser(UserDto userDto, @MappingTarget User user);
}

class UserDto {
    String username;
    int age;
}

public class Main {
    public static void main(String[] args) {
        UserDto userDto = new UserDto("John", 25);
        User user = UserMapper.INSTANCE.toUser(userDto);
        System.out.println(user);

        User updatedUser = UserMapper.INSTANCE.updateUser(userDto, user.withAge(30));
        System.out.println(updatedUser);
    }
}

在上述示例中,User类使用了Lombok的@Builder注解,生成了Builder模式的构造器。UserMapper接口使用了Mapstruct的@Mapper注解,指定了映射器的组件模型。toUser方法定义了属性映射关系,将UserDto对象映射为User对象。updateUser方法使用了@With注解,用于更新User对象的属性。

这样,通过结合Lombok的@With注解和Mapstruct的映射功能,可以实现便捷的属性更新和对象映射操作。

推荐的腾讯云相关产品:腾讯云函数(Serverless云函数计算服务),腾讯云API网关(API网关服务),腾讯云COS(对象存储服务)。

腾讯云函数产品介绍链接地址:https://cloud.tencent.com/product/scf

腾讯云API网关产品介绍链接地址:https://cloud.tencent.com/product/apigateway

腾讯云COS产品介绍链接地址:https://cloud.tencent.com/product/cos

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

mapstruct使用正确姿势

地址:github.com/mapstruct/m… 使用例子:github.com/mapstruct/m… 一、准备工作 接下来,阿淼将和大家一起去解开这个巧媳妇儿真正面纱,所以我们还需要做一点准备工作...r若我们使用JDK版本高于1.8,当我们在pom里面导入依赖时候,建议使用坐标是:org.mapstruct:mapstruct-jdk8,这可以帮助我们利用一些Java8新特性。...,结果是这样子: 从图中我们可以看到,编译使用了expression中定义表达式对目标字段 createTime 进行了转换;然后你还会发现 updateTime 字段也被自动从 LocalDateTime...小结: 当字段类型不一致,以下类型之间是 mapstruct 自动进行类型转换: 1、基本类型及其他们对应包装类型。 此时 mapstruct 会自动进行拆装箱。...: 当字段名不一致,通过使用 @Mappings 注解指定对应关系,编译后即可实现对应字段赋值。

1.5K10

Java对象属性复制组件-Mapstruct项目改造指南

项目改造与踩坑提示 这次改造中相关依赖版本: lombok版本1.16.22,改造升级为1.18.12 项目原有依赖fastjson版本1.2.62 引入MapStruct版本为1.4.1.Final...说明: 之所以要升级lombok版本,是因为上面UserDto对象转化为LoginEventDto对象,原有项目只在UserDto上添加@Builder,但是继承类LoginEventDto无法继承...lombok版本才有,所以才升级lombok版本。...但在上面一步升级lombok过程中,lombok对于@Builder实现出现了一些修改:在1.16.22生成代码中,是存在private级别的无参构造函数;而在1.18.12生成代码中,并没有私有无参构造函数...Q&A 在项目引入MapStruct,有人会提出现在反射性能消耗已经很低了,Spring、Mybatis等各种框架中大量使用反射,为什么还要使用MapStruct这种编译期生成代码组件?

2.6K41

mapstruct使用正确姿势

属性用于指定自动生成接口实现类组件类型,这个属性支持四个值: default: 这是默认情况,mapstruct使用任何组件类型, 可以通过Mappers.getMapper(Class)方式获取自动生成实例对象...r若我们使用JDK版本高于1.8,当我们在pom里面导入依赖时候,建议使用坐标是:org.mapstruct:mapstruct-jdk8,这可以帮助我们利用一些Java8新特性。...,结果是这样子: 从图中我们可以看到,编译使用了expression中定义表达式对目标字段 createTime 进行了转换;然后你还会发现 updateTime 字段也被自动从 LocalDateTime...阿淼小结: 当字段类型不一致,以下类型之间是 mapstruct 自动进行类型转换: 1、基本类型及其他们对应包装类型。 此时 mapstruct 会自动进行拆装箱。...: 当字段名不一致,通过使用 @Mappings 注解指定对应关系,编译后即可实现对应字段赋值。

1.2K10

SpringBoot实战:整合MapStruct实现数据类型转化

自动生成映射转换代码只使用简单方法调用,因此速度快、类型安全而且易于理解阅读;本篇就是实现 SpringBoot 整合 MapStruct 实现数据类型转化。.../模块介绍 2、MapStruct 注释说明 3、Idea 安装 MapStruct 插件 3、项目结构说明 二、项目搭建与构造 1、添加项目 maven 依赖 2、转换对象 DTO 与 VO 3、转换器...自动生成映射转换代码只使用简单方法调用,因此速度快、类型安全而且易于理解阅读; commons-lang3:apache 提供众多 commons 工具包,号称 Java 第二 API,而 common...里面 lang3 包更是被我们使用得最多。...2、MapStruct 注释说明 注解说明: @Mapper 只有在接口加上这个注解, MapStruct 才会去实现该接口 @Mapper 里有个 componentModel 属性,主要是指定实现类类型

1.7K20

别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?

源码精品专栏 原创 | Java 2021 超神之路,很肝~ 中文详细注释开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 Netty 源码解析 消息中间件 RocketMQ 源码解析...-- idea 2018.1.1 之前版本需要添加下面的配置,后期版本就不需要了,可以注释掉, 我自己用2019.3 -->                                                                关于lombokmapstruct...版本兼容问题多说几句,maven插件要使用3.6.0版本以上、lombok使用1.16.16版本以上,另外编译lombok mapstruct插件不要忘了加上。...这种异常就是lombok编译异常导致缺少get setter方法造成。还有就是缺少构造函数也会抛异常。

52810

芋道 Spring Boot 对象转换 MapStruct 入门

在配置方法约定之后,MapStruct 使用了合理默认值,但在配置或实现特殊行为时将不再适用。...编译类型安全:只能映射彼此对象和属性,不能映射一个 Order 实体到一个 Customer DTO 中等等。 如果无法映射实体或属性,则在编译清除错误报告。 2....至此,我们已经完成了 MapStruct 快速入门。 3. 集成 Lombok 示例代码对应仓库:lab-55-mapstruct-demo-lombok 。...恰好,MapStruct 自动生成对象转换代码,也是依赖 setter、getter 方法,因此两者在一起使用时,需要进行相应配置。如下图所示: ?...至此,我们已经完成了 MapStructLombok 集成。 4. @Mapping 在对象转换,我们可能会存在属性不是完全映射情况,例如说属性名不同。

2.6K20

springboot 使用org.mapstruct方法

​ 目录 前言: 第一步:pom文件内添加依赖 第二步:可以新建一个抽象类,来重新包装一下这个方法 第三步:可以直接进行使用即可,可以查找一下源码就可以使用了 最后: 前言: 最近在做一个...springboot项目,里面有很多关于对应转换操作,要写很多重复赋值代码,比较烦,于是在网上搜了可以使用一个插件来解决,使用简单,现在分享给需要同学; 第一步:pom文件内添加依赖 第二步:...可以新建一个抽象类,来重新包装一下这个方法 第三步:可以直接进行使用即可,可以查找一下源码就可以使用了 最后: 在开发过程中要做到,在开发重复代码时候要记得使用一些技术来解决这个问题...,比如说可以找一些插件来解决,直接使用一句代码就能搞定了

59861

丢弃掉那些 BeanUtils 工具类吧,MapStruct 是真香!!!

在配置方法约定之后,MapStruct 使用了合理默认值,但在配置或实现特殊行为时将不再适用。...编译类型安全:只能映射彼此对象和属性,不能映射一个 Order 实体到一个 Customer DTO 中等等。 如果无法映射实体或属性,则在编译清除错误报告。 2....至此,我们已经完成了 MapStruct 快速入门。 3. 集成 Lombok “示例代码对应仓库:lab-55-mapstruct-demo-lombok 。...恰好,MapStruct 自动生成对象转换代码,也是依赖 setter、getter 方法,因此两者在一起使用时,需要进行相应配置。如下图所示: ?...至此,我们已经完成了 MapStructLombok 集成。 4. @Mapping 在对象转换,我们可能会存在属性不是完全映射情况,例如说属性名不同。

2.2K50

MapStruct才是王者!【附源码】

MapStruct 是插入 Java 编译器注释处理器,可以在命令行构建(Maven、Gradle等)中使用,也可以在首选 IDE 中使用。...错误,经过查阅资料发现 mapstruct-processor 和 Lombok 版本需要统一一下:mapstruct-processor:1.2.0.Final , Lombok:1.16.14。...CarDto ,方法名可以自由选择; 对于源对象和目标对象中具有不同名称属性,可以使用 @Mapping 注释来配置名称; 对于源对象和目标对象中具有不同类型属性,也可以使用 @Mapping 注释来进行转换...source:属性源名称, 如果带注释方法有多个源参数,则属性名称必须使用参数名称限定,例如“addressParam.city"; 当找不到匹配属性MapStruct 将查找匹配参数名称;...如果你仅是在日常处理少量对象,选取哪个其实变得并不重要,但数据量大建议还是使用 MapStruct 或 BeanCopier 方式,提高接口性能。

1.9K20

实战之mapstruct妙用

1. lombok lombok是一款插件,在常用开发工具eclipse和idea中都很好进行安装,具体安装方式请自行网上寻找。lombok提供了一些注解,会在编译期帮你自动生成一些代码。...在开发工具上安装相应插件 idea上需要安装plugin: ? 2. mapstruct 是提供了很多注解工具一款插件,依赖于lombok,在这里主要介绍它bean实例转化用法。 1....(这里不去深究深copy和浅copy概念)。使用mapstruct注解可以在编译自动生成bean转化对应类和方法。 2. 使用步骤 1....引入依赖 1.16.181.2.0.Final</mapstruct-jdk8.version...常用注解使用: @BeanMapping 转换整个bean @Mappings 里面放置一系列mapping @Mapping 可以针对字段名不一样两个属性映射,如果不指明则会去找相同名字属性

5K30

别再用 BeanUtils 了,这款 PO VO DTO 转换神器不香么?

介绍一个开源项目 mapstruct ,可以轻松优雅进行转换,简化你代码。 当然有的人喜欢写get set,或者用BeanUtils 进行复制,代码只是工具,本文只是提供一种思路。...-- idea 2018.1.1 之前版本需要添加下面的配置,后期版本就不需要了,可以注释掉, 我自己用2019.3 -->                                                                关于lombokmapstruct...版本兼容问题多说几句,maven插件要使用3.6.0版本以上、lombok使用1.16.16版本以上,另外编译lombok mapstruct插件不要忘了加上。...如果您正在学习Spring Boot,推荐一个连载多年还在继续更新免费教程:http://blog.didispace.com/spring-boot-learning-2x/ 这种异常就是lombok

29130

Lombok插件安装以及使用

Lombok插件安装以及使用 LomboK介绍和配置(能用就用如果使用出问题就不要用) 1.目标 掌握LomboK配置 2.路径 什么是LomboK LomboK作用 LomboK配置 3.讲解...而使用 Lombok 插件后,就不需要在代码里面写getter/setter/toString/HashCode等等方法,将会在编译后class文件中自动添加,使代码看起来更简洁些。... provided 3.3.2 安装插件 使用Lombok还需要插件配合,我使用开发工具为idea....不过也有些时候会碰到编译出错情况,可以按照下面进行解决。 3.3.3 解决编译出错问题 编译出错,可能是没有enable注解处理器。...属性做修改时,也简化了维护为这些属性所生成getter/setter方法等 缺点: 不支持多种参数构造器重载 由于环境问题可能会导致lombok失效,如果遇到这种情况,直接不要使用lombok

73910

全网疯传MapStruct到底有多香?

另外,当遇到复杂转换,像字段名不同,或者需要深拷贝,使用上述工具类复制之后,还得重新写一堆Setter方法,而且代码很难复用。...接下来看看MapStruct,一个基于Java注解代码生成器,它通过编译代码生成,避免了运行时反射调用,从而使转换变得高效,还减少了运行时错误,提高了代码可维护性。...MapStruct使用方法简单直观,开发者只需定义映射接口,编译自动生成实现类,大大减少了手动编写样板代码。...别急,往下看,当要对某些属性自定义转换方法MapStruct实现更加灵活。...因为是编译期就会生成真正映射代码,所以MapStruct使得程序运行期性能得到了大大提升,对象拷贝强烈推荐,秒杀BeanUtils,真的很香!!!

14610

SpringBoot 整合mapstruct|赶紧丢掉BeanUtils吧

,我们通常有几种做法: 手动一个个字段赋值 通过反序列化手段,必须先转成JSON字符串,再转回来 使用SpringBeanUtils,提供克隆方法 上面三种方式我们应该都使用过,但是我们今天介绍主角是...注意超过 2 个参数查询封装,禁止 使用 Map 类来传输。 mapstruct 是用来干什么?...支持复杂属性赋值 效率高,在编译直接给你生成代码,相当于帮你手动去一个个赋值 支持不同字段间赋值,通过注解实现 编码 引入依赖 项目中除了引用mapstruct本身依赖 ,还引入了神器lombok...答案:由于mapstructlombok都会在编译期为项目生成代码,两个如果一起用的话,就有可能导致mapstruct失效;我猜测有可能我们借助lombok生成 get set方法原因,有可能mapstruct...基本过程,解决了mapstructlombok一起使用,导致mapstruct失效bug,另外也介绍了mapstruct基本使用方法,后续会出更多集成指南,敬请期待!

1.5K10

业务代码救星——Java 对象转换框架 MapStruct 妙用

在转换大部分属性都是相同,只有少部分不同,如果手工编写转换代码,会很繁琐。这时我们可以通过一些对象转换框架来更方便做这件事情。...通过查阅一些资料可得: MapStruct 是一个可以处理注解Java编译器插件,可以在命令行中使用,也可以在 IDE 中使用。...MapStruc t有一些默认配置,但是也为用户提供了自己进行配置途径。缺点就是这玩意在使用工具自带编译器不会生成实现类,需要通过 maven 方式来进行编译,然后才会生成实现类。...一些可能会出现问题 找不到注释处理程序:在 pom.xml 中增加 mapstruct-processor 依赖 没有找到实现类:在 pom.xml 中加入对 mapstruct-processor...依赖 在 IDEA 里面 enable Annotation Processor 使用 Lombok 情况下,编译时报 Data 类 setter/getter 找不到:把 lombok 加入到

1.9K40
领券