美文网首页
mapstruct使用

mapstruct使用

作者: 程序男保姆 | 来源:发表于2021-06-29 17:13 被阅读0次

增驾依赖

     <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-jdk8</artifactId>
            <version>1.3.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct-processor</artifactId>
            <version>1.3.1.Final</version>
        </dependency>

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>8</source>
                    <target>8</target>
                    <encoding>UTF-8</encoding>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>1.3.1.Final</version>
                        </path>
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.12</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>


package com.example.mapstruct;

import java.util.List;
import org.mapstruct.InheritConfiguration;
import org.mapstruct.InheritInverseConfiguration;
import org.mapstruct.MapperConfig;
import org.mapstruct.Mappings;

/***
 *
 * @Mapper 只有在接口加上这个注解, MapStruct 才会去实现该接口
 *     @Mapper 里有个 componentModel 属性,主要是指定实现类的类型,一般用到两个
 *     default:默认,可以通过 Mappers.getMapper(Class) 方式获取实例对象
 *     spring:在接口的实现类上自动添加注解 @Component,可通过 @Autowired 方式注入
 * @Mapping:属性映射,若源对象属性与目标对象名字一致,会自动映射对应属性
 *     source:源属性
 *     target:目标属性
 *     dateFormat:String 到 Date 日期之间相互转换,通过 SimpleDateFormat,该值为 SimpleDateFormat              的日期格式
 *     ignore: 忽略这个字段
 * @Mappings:配置多个@Mapping
 * @MappingTarget 用于更新已有对象
 * @InheritConfiguration 用于继承配置

 *
 * @param <Source>
 * @param <Target>
 */
@MapperConfig
public interface BaseMapping<Source, Target> {
    @Mappings({})
    @InheritConfiguration
    Target to(Source var1);

    @InheritConfiguration
    List<Target> to(List<Source> var1);

    @InheritInverseConfiguration
    Source from(Target var1);

    @InheritInverseConfiguration
    List<Source> from(List<Target> var1);
}

package com.example.mapstruct;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

import java.util.List;

@Mapper
public interface PersonConverter extends BaseMapping<PersonDTO,Person>{
    PersonConverter INSTANCE = Mappers.getMapper(PersonConverter.class);

//    @Mappings({
//             @Mapping(source = "birthday", target = "birth"),
////            @Mapping(source = "birthday", target = "birthDateFormat", dateFormat = "yyyy-MM-dd HH:mm:ss"),
////            @Mapping(target = "birthExpressionFormat", expression = "java(DateFormatUtils.format(person.getBirthday(),\"yyyy-MM-dd HH:mm:ss\"))"),
//            @Mapping(source = "user.age", target = "age"),
//            @Mapping(target = "email", ignore = true)
//    })
//    PersonDTO domain2dto(Person person);
//
//    List<PersonDTO> domain2dto(List<Person> people);
}

package com.example.mapstruct;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class Person {
    private Long id;
    private String name;
    private String email;
    private Date birthday;
    private User user;
}


package com.example.mapstruct;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

import java.util.Date;

@NoArgsConstructor
@AllArgsConstructor
@Data
@Accessors(chain = true)

public class PersonDTO {
    private Long id;
    private String name;
    /**
     * 对应 Person.user.age
     */
    private Integer age;
    private String email;
    /**
     * 与 DO 里面的字段名称(birthDay)不一致
     */
    private Date birth;
    /**
     * 对 DO 里面的字段(birthDay)进行拓展,dateFormat 的形式
     */
    private String birthDateFormat;
    /**
     * 对 DO 里面的字段(birthDay)进行拓展,expression 的形式
     */
    private String birthExpressionFormat;

} 

package com.example.mapstruct;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {
    private Integer age;
}

package com.example.mapstruct;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class PersonConverterTest {

    public static void main(String[] args) {
        Person person = new Person(1L,"zhige","zhige.me@gmail.com",new Date(),new User(1));
//        PersonDTO personDTO = PersonConverter.INSTANCE.domain2dto(person);
//
//        List<Person> people = new ArrayList<>();
//        people.add(person);
//        List<PersonDTO> personDTOs = PersonConverter.INSTANCE.domain2dto(people);
//

        PersonDTO personDTO1 = PersonConverter.INSTANCE.from(person);


        System.out.println(12);


    }

}

相关文章

  • MapStruct使用

    背景 在一个成熟可维护的工程中,细分模块后,domian工程最好不要被其他工程依赖,但是实体类一般存于domain...

  • MapStruct 使用

    对象映射工具的由来 大型项目采用分层开发,每层的数据模型都不同:在持久化层,模型层为 PO(Persistent ...

  • mapstruct使用

    一、maven依赖 二、plugin插件 注意:lombok插件必须同时配置,如果你使用了lombok插件的话 三...

  • mapStruct使用

    https://mapstruct.org/

  • MapStruct使用

    1.对象属性映射的苦恼 在日常开发中,常常涉及到接收Request对象,属性映射到内部交互的VO对象、甚至需要进一...

  • mapstruct使用

    增驾依赖

  • mapstruct使用

    参考

  • MapStruct实现对象映射

    1 序 MapStruct是一个属性映射工具,只需要使用@Mapper注解标注的映射接口。MapStruct就会自...

  • mapstruct 和lombok 结合之后mapstruct生

    lombok和mapstruct配合转换bean后,mapstruct生成空的实现. 如果出现mapstruct和...

  • Mapstruct-使用

    前言:最近在项目中看到有同事使用这样的注解,之前没有见到过,立即百度了下,噢,原来是一个属性映射工具,只需要定义一...

网友评论

      本文标题:mapstruct使用

      本文链接:https://www.haomeiwen.com/subject/lljkultx.html