官网:https://mapstruct.org/documentation/installation/
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.66</version>
</dependency>
<dependency>
<groupId>joda-time</groupId>
<artifactId>joda-time</artifactId>
<version>2.10.6</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.10</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
dto
@Data @ToString public class PersonDto implements Serializable { private Integer id; private String nickName; private String address; private List<Bag> bagList; private String cardNo; private String birthdayStr; private Date registerDate; private Integer sex; private List<String> foods; private String phone; private String buyStatus; }
entity
@Data @NoArgsConstructor @AllArgsConstructor public class Bag implements Serializable { private String title; private BigDecimal price; private Date buyDate; }
@Data @ToString public class Person implements Serializable { private Integer id; private String nickName; private String address; private List<Bag> bagList; private String cardNum; private Date birthdayDate; private String registerStr; private Integer gender; private List<String> foods; private Integer buyed; }
utils
@Slf4j public class DateUtils { public static final String TIME_ZONE = "GMT+8"; public static final String LUNA_DATE_TIME = "yyyy-MM-dd HH:mm:ss"; /** * String(yyyy-MM-dd HH:mm:ss)格式日期转为Date * * @param str * @return * @throws ParseException */ public static Date parseDateTime(String str) throws ParseException { return org.apache.commons.lang3.time.DateUtils.parseDate(str, new String[]{LUNA_DATE_TIME}); } }
@Mapper public interface PersonConvert { PersonConvert PERSON_CONVERT = Mappers.getMapper(PersonConvert.class); @Mappings({ //映射 @Mapping(source = "cardNum", target = "cardNo"), //Date 格式化为 String @Mapping(source = "birthdayDate", target = "birthdayStr", dateFormat = "yyyy-MM-dd"), //String 格式化为 Date @Mapping(target = "registerDate", expression = "java(com.luna.mapstruct.util.DateUtils.parseDateTime(person.getRegisterStr()))"), //映射默认值 @Mapping(source = "gender", target = "sex", defaultValue = "1"), //默认表达式 @Mapping(target = "foods", defaultExpression = "java(new java.util.ArrayList<>())"), //映射常量值 @Mapping(target = "phone", constant = "123@qq.com") }) PersonDto convertDto(Person person) throws Exception; /** * 将在转换执行 * @param person * @param personDto */ @AfterMapping default void convertBuyed(Person person, @MappingTarget PersonDto personDto) { if (person.getBuyed() != null && person.getBuyed() == 1) { personDto.setBuyStatus("已购"); } } /** * 列表转换 * @param peopleList * @return */ List<PersonDto> convertListDto(List<Person> peopleList); // @InheritConfiguration //取消默认转换,仅指定哪些字段映射 @BeanMapping(ignoreByDefault = true) @Mappings({ @Mapping(source = "id",target = "id") }) PersonDto update(Person person, @MappingTarget PersonDto personDTO)throws Exception; }
Test
public class AppTest { @Test public void testMapstruct() throws Exception { // testDto(); // testListDto(); testCustomDto(); } public void testDto() throws Exception { Person person = new Person(); person.setId(1); person.setNickName("张三"); person.setAddress("杭州"); person.setCardNum("123"); person.setBirthdayDate(new Date()); person.setRegisterStr("2022-01-01 12:00:00"); List<Bag> list = new ArrayList<>(); list.add(new Bag("红色", BigDecimal.valueOf(1), new Date())); list.add(new Bag("黑色", BigDecimal.valueOf(2), new Date())); person.setBagList(list); person.setBuyed(1); PersonDto personDto = PersonConvert.PERSON_CONVERT.convertDto(person); System.out.println(JSON.toJSONString(personDto)); person.setNickName("李四"); PersonDto update = PersonConvert.PERSON_CONVERT.update(person, personDto); System.out.println(JSON.toJSONString(update)); } /** * 自定义转换 * @throws Exception */ public void testCustomDto() throws Exception { Person person = new Person(); person.setId(1); // person.setNickName("张三"); // person.setAddress("杭州"); // person.setCardNum("123"); person.setBirthdayDate(new Date()); person.setRegisterStr("2022-01-01 12:00:00"); PersonDto personDto = PersonConvert.PERSON_CONVERT.update(person,new PersonDto()); System.out.println(JSON.toJSONString(personDto)); } public void testListDto() { Person person = new Person(); person.setId(1); person.setNickName("张三"); person.setAddress("杭州"); person.setCardNum("123"); person.setBirthdayDate(new Date()); person.setRegisterStr("2022-01-01 12:00:00"); List<Bag> list = new ArrayList<>(); list.add(new Bag("红色", BigDecimal.valueOf(1), new Date())); list.add(new Bag("黑色", BigDecimal.valueOf(2), new Date())); person.setBagList(list); List<PersonDto> personDtoList = PersonConvert.PERSON_CONVERT.convertListDto(Arrays.asList(person)); System.out.println(JSON.toJSONString(personDtoList)); } }
全文完,感谢您的耐心阅读~
欢迎大家关注我的公众号

浙公网安备 33010602011771号