是时候使用MapStruct替代BeanUtils了
大约 3 分钟
是时候使用MapStruct替代BeanUtils了
实例代码(后文有源码)
- 左边一列是两个要转换的对象。
- 字段名相同、类型相同的
- 字段名相同、类型不同的
- 字段名不同、类型不同的
- 中间一列是转换代码
- 右边一列是引用到的代码
看上面代码应该也能明白大概怎么使用了
源码
package org.example;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
@Data
public class UserDto implements Serializable {
private Integer id;
private String name;
private String address;
private Date birth1;
private Gender gender;
private Boolean test;
}
================================================================================
package org.example;
import lombok.Data;
@Data
public class User {
private Integer id;
private String name;
private String address;
private String birth;
private String gender;
private String test1;
}
================================================================================
package org.example;
public enum Gender {
MALE,
FEMALE
}
================================================================================
package org.example;
public class BooleanStrFormat {
public String toStr(Boolean isDisable) {
System.out.println("BooleanStrFormat.toStr");
if (isDisable) {
return "Y";
} else {
return "N";
}
}
public Boolean toBoolean(String str) {
System.out.println("BooleanStrFormat.toBoolean");
if (str.equals("Y")) {
return true;
} else {
return false;
}
}
}
================================================================================
package org.example;
import lombok.SneakyThrows;
import org.mapstruct.MapMapping;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
@Mapper(uses = {BooleanStrFormat.class})
public interface UserMapper {
@Mapping(target = "birth1", source = "birth")
@Mapping(target = "test", source = "test1")
UserDto userToUserDto(User user);
List<UserDto> userToUserDto(List<User> users);
/*default String date2Str(Date date) {
System.out.println("执行了date2Str");
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
}*/
@SneakyThrows
default Date str2Date(String date) {
System.out.println("执行了str2Date");
return new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss"
).parse(date);
}
default Gender str2Gender(String str) {
System.out.println("执行了str2Gender");
return Gender.valueOf(str);
}
@MapMapping(valueDateFormat = "yyyy-MM-dd HH:mm:ss")
Map<String, String> DateMapToStringMap(
Map<String, Date> sourceMap);
}
================================================================================
package org.example;
import org.junit.Test;
import org.mapstruct.factory.Mappers;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
public class Tests {
@Test
public void userPoToUserDto() {
User user = new User();
user.setId(1);
user.setName("myx");
user.setAddress("河北沧州");
user.setBirth("2023-06-06 12:12:12");
user.setGender("MALE");
user.setTest1("Y");
UserMapper mapper = Mappers.getMapper(UserMapper.class);
UserDto userDto = mapper.userToUserDto(user);
System.out.println(userDto);
}
@Test
public void mapMappingTest() {
Map<String, Date> map = new HashMap<>();
map.put("key1", new Date());
map.put("key2", new Date(new Date().getTime() + 9800000));
UserMapper mapper = Mappers.getMapper(UserMapper.class);
Map<String, String> stringObjectMap =
mapper.DateMapToStringMap(map);
System.out.println(stringObjectMap);
}
}
系统推荐
- synchronized原理深度剖析
- 来个JVM冷知识
- Git合并多个提交并push到远程仓库
- 测试两台服务器间的网速
- 数据同步方案
- 线上FullGC频繁的排查
- 简易版配置中心&初探原理
- Javassist整理
- 前端axios下载csv文件乱码
- sofajraft
- Docker跨主机通信方案
- PostgreSQL JSON类型字段常用操作
- 随机毒鸡汤:事事如意料之外,年年有余额不足。