相关文章推荐
咆哮的牛肉面  ·  Netlify build failed ...·  1 年前    · 
怕老婆的仙人球  ·  libusb-win32 - ...·  1 年前    · 
爱跑步的篮球  ·  Python爬虫库-Beautiful ...·  1 年前    · 
大力的凳子  ·  [Python从零到壹] ...·  1 年前    · 

需要一个映射器,该映射器可以根据客户及其地址之一创建收获地址。 MapStruct通过具有多个源对象来支持此操作:

@Mapper(componentModel = "spring")
public interface DeliveryAddressMapper {
    @Mapping(source = "customer.firstName", target = "forename")
    @Mapping(source = "customer.lastName", target = "surname")
    @Mapping(source = "address.street", target = "street")
    @Mapping(source = "address.postalcode", target = "postalcode")
    @Mapping(source = "address.county", target = "county")
    DeliveryAddress from(Customer customer, Address address);
    @Test
    public void test12() {
        Customer customer = new Customer();
        customer.setFirstName("张");
        customer.setLastName("三");
        Address homeAddress = new Address();
        homeAddress.setStreet("科技二路");
        homeAddress.setCounty("雁塔区");
        homeAddress.setPostalcode("89123");
        DeliveryAddress deliveryAddress = deliveryAddressMapper.from(customer, homeAddress);
        assertEquals(deliveryAddress.getForename(), customer.getFirstName());
        assertEquals(deliveryAddress.getSurname(), customer.getLastName());
        assertEquals(deliveryAddress.getStreet(), homeAddress.getStreet());
        assertEquals(deliveryAddress.getCounty(), homeAddress.getCounty());
        assertEquals(deliveryAddress.getPostalcode(), homeAddress.getPostalcode());

4.使用@MappingTarget更新已存在的对象

到现在为止,已经有了可以创建目标类新实例的映射器。 使用多个源对象,还可以提供一个要更新的实例。

使用@MappingTarget对其进行处理:

    @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"。