官网: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)); } }
全文完,感谢您的耐心阅读~
欢迎大家关注我的公众号

分类:
java
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了