@Test
public void test13() {
DeliveryAddress deliveryAddress = new DeliveryAddress();
deliveryAddress.setForename("张");
deliveryAddress.setSurname("三");
deliveryAddress.setStreet("科技二路");
deliveryAddress.setCounty("雁塔区");
deliveryAddress.setPostalcode("89123");
Address newAddress = new Address();
newAddress.setStreet("西长安街");
newAddress.setCounty("长安区");
newAddress.setPostalcode("12345");
DeliveryAddress updatedDeliveryAddress = deliveryAddressMapper.updateAddress(deliveryAddress, newAddress);
assertSame(deliveryAddress, updatedDeliveryAddress);
assertEquals(deliveryAddress.getStreet(), newAddress.getStreet());
assertEquals(deliveryAddress.getCounty(), newAddress.getCounty());
assertEquals(deliveryAddress.getPostalcode(), newAddress.getPostalcode());
在MapStruct中使用多个源对象1.介绍如何在MapStruct中使用多个源对象。2.单个源对象MapStruct最常见的用例是将一个对象映射到另一个对象。 假设我们有一个Customer类:@Data@AllArgsConstructor@NoArgsConstructorpublic class Customer { private String firstName; private String lastName;}@Data@AllArgsConstruc
在我们日常开发的分层结构的应用程序中,为了各层之间互相解耦,一般都会定义不同的对象用来在不同层之间传递数据,因此,就有了各种 XXXDTO、XXXVO、XXXBO 等基于数据库对象派生出来的对象,当在不同层之间传输数据时,不可避免地经常需要将这些对象进行相互转换。
此时一般处理两种处理方式:① 直接使用 Setter 和 Getter 方法转换、② 使用一些工具类进行转换(e.g. BeanUtil.copyProperties)。第一种方式如果对象属性比较多时,需要写很多的 Getter/Sette
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-jdk8</artifactId>
<version>1.2.0.Final</version>
在使用分层或者分模块化的项目中,我们可能定义各种各样的O,例如:DO,VO,DTO等等。我们在进行这些对象之间的拷贝时,通过手动写get/set方法进行属性之间的赋值。因为他们之间的属性大部分都是相同的,不仅浪费时间,并且还有大量重复代码。所以,各种框架都添加的对象之间的拷贝的工具类。例如:
Spring自带了BeanUtils
Apatch自带的BeanUtils
Apatch自带的PropertyUtils
mapstruct提供Mappers
本文主要介绍MapStruct的基础知识、M
1、entity 里的每一个字段,与数据库相对应,
2、vo 里的每一个字段,是和你前台 html 页面相对应,
3、dto 这是用来转换从 entity 到 vo,或者从 vo 到 entity 的中间的东西 。(DTO中拥有的字段应该是entity中或者是vo中的一个子集)
举个例子:
你的html页面上有三个字段,name,pass,age
你的数据库表里,有两个字段,name,pass , 注意没有 age。
而你的 vo 里,就应该有下面三个成
优雅的转换拷贝对象—mapstructMapStruct是什么MapStruct优点MapStruct使用MapStruct代码生成器处理器选项配置具体配置方式创建用户类创建用户VO创建一个转换接口调用user转userVO方法就会自动转换通过接口方法 看自动生成的代码如下自定义属性映射多个source参数的映射
MapStruct是什么
项目经常有这样的场景,我要把对象a的name转换到对象b的name去,我们经常是使用BeanUtils.copyProperties();方法去实现的,但是这样做很大的
mapstrct是一个很好注释处理的框架,解决繁琐domain之间值的转换,节约开发的时间,同时相对应copyProperty的好处是没有使用反射技术,使性能更优。mapstrut一共两个主要的包,org.mapstruct.mapstruct包含里面常用的注释,org.mapstruct.mapstruct-processor处理注释的实现。
文档传送门
maven引入
MapStruct用于生成安全的Bean的映射类。
MapStruct采用注解的方式,使用它我们所需要做的就是定一个映射的接口,该接口中声明任何需要的映射方法。在代码的编译期间,由MapStruct生成该接口的实现类。值得注意的是,MapStruct在实现接口的时候并没有采用反射的方式,而是采用普通的java方法来实现的。
简单来说,我们在实际的项目中很多书情况下,都会遇到不同模块层之间的数据进行传递的时候,需要涉及到对象的转换:
1、比如在经典三层的项目架构中,dao层的entity需要传递给
赠送jar包:mapstruct-1.1.0.Final.jar;
赠送原API文档:mapstruct-1.1.0.Final-javadoc.jar;
赠送源代码:mapstruct-1.1.0.Final-sources.jar;
赠送Maven依赖信息文件:mapstruct-1.1.0.Final.pom;
包含翻译后的API文档:mapstruct-1.1.0.Final-javadoc-API文档-中文(简体)版.zip;
Maven坐标:org.mapstruct:mapstruct:1.1.0.Final;
标签:mapstruct、中文文档、jar包、java;
使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。
人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
该存储库包含一些示例,这些示例显示了如何使用 (Java注释处理器)来生成类型安全的bean映射类。
当前,存在以下示例:
mapstruct-on-ant :显示如何在基于Ant的项目中使用MapStruct; 要构建此示例,请在命令行上运行ant build
mapstruct-on-gradle :显示如何在基于Gradle的项目中使用MapStruct; 要构建示例项目,请在命令行上运行./gradlew clean build
mapstruct-on-bazel :显示如何在基于Bazel的项目中使用MapStruct; 要构建示例项目,请在命令行上运行bazel build //... ,以测试项目,请运行bazel test //...
mapstruct-lombok :显示如何与Lombok一起使用MapStruct(带有Maven p
MapStruct是一个Java用于自动实现Java对象映射的工具库。下面是一个简单的使用案例:
假设你有两个Java类,一个是Person类,一个是PersonDTO类,它们有一些相同的属性,但是名称不同,例如Person类有firstName属性,而PersonDTO类有name属性。你可以使用MapStruct来自动生成一个PersonMapper接口,并实现将Person类的对象转换为PersonDTO类的对象的方法。
首先,你需要在pom.xml文件中添加MapStruct的依赖:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.4.0.Final</version>
</dependency>
然后,你可以在PersonMapper接口中使用@Mapper注解,并声明一个用于将Person类转换为PersonDTO类的方法:
@Mapper
public interface PersonMapper {
PersonDTO toDTO(Person person);
最后,你可以使用MapStruct提供的注解@Mapping来指定属性之间的映射关系:
@Mapper
public interface PersonMapper {
@Mapping(source = "firstName", target = "name")
PersonDTO toDTO(Person person);
现在,你就可以使用PersonMapper来转换Person类的对象到PersonDTO类的对象了:
PersonMapper mapper = Mappers.getMapper(PersonMapper.class);
PersonDTO dto = mapper.toDTO(new Person("John", "Doe"));
dto的name属性将会是"John"。