增驾依赖
<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);
}
}
网友评论