Java ModelMapper基本用法
1. 概述
- ModelMapper是利用反射机制原理实现的智能对象映射工具(Object To Object).
2. Maven包
<dependency>
<groupId>org.modelmapper</groupId>
<artifactId>modelmapper</artifactId>
<version>2.3.5</version>
</dependency>
3. 配置环境
- 匹配策略中最好是严格的否者会有 如:类似的字段名也会被匹配的情况出现.
@Bean
public ModelMapper modelMapper() {
final ModelMapper modelMapper = new ModelMapper();
/**
* 完全匹配
*/
modelMapper.getConfiguration().setFullTypeMatchingRequired(true);
/**
* 匹配策略定义为严格
*/
modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);
return modelMapper;
}
4. Seller.java, Order.java
import java.time.LocalDateTime;
public class Seller {
private Integer id;
private String name;
private String memo;
protected LocalDateTime createTime;
private String phone;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Seller{" +
"id=" + id +
", name='" + name + '\'' +
", memo='" + memo + '\'' +
", createTime=" + createTime +
", phone='" + phone + '\'' +
'}';
}
}
import java.math.BigDecimal;
import java.time.LocalDateTime;
public class Order {
private Long id;
private String name;
public String memo;
public LocalDateTime createTime;
public BigDecimal price;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getMemo() {
return memo;
}
public void setMemo(String memo) {
this.memo = memo;
}
public LocalDateTime getCreateTime() {
return createTime;
}
public void setCreateTime(LocalDateTime createTime) {
this.createTime = createTime;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
@Override
public String toString() {
return "Order{" +
"id=" + id +
", name='" + name + '\'' +
", memo='" + memo + '\'' +
", createTime=" + createTime +
", price=" + price +
'}';
}
}
5. 测试例子
@Autowired
ModelMapper modelMapper;
@GetMapping("/test")
public @ResponseBody Map<String, String> test() {
final Map<String, String> result = new HashMap<>();
/**
* 创建 Seller对象
* */
final Seller seller = new Seller();
seller.setId(8);
seller.setName("测试名称");
seller.setMemo("测试笔记");
seller.setCreateTime(LocalDateTime.now());
seller.setPhone("18812341234");
/**
* Seller对象的值复制到 Order对象
* */
final Order order = modelMapper.map(seller, Order.class);
seller.setId(88);
seller.setName("测试名称 后改");
System.out.println(seller);
// Seller{id=88, name='测试名称 后改', memo='测试笔记', createTime=2019-09-24T11:28:18.017, phone='18812341234'}
System.out.println(order);
// Order{id=8, name='测试名称', memo='测试笔记', createTime=2019-09-24T11:28:18.017, price=null}
order.setId(9L);
System.out.println(seller);
// Seller{id=88, name='测试名称 后改', memo='测试笔记', createTime=2019-09-24T11:28:18.017, phone='18812341234'}
System.out.println(order);
// Order{id=9, name='测试名称', memo='测试笔记', createTime=2019-09-24T11:28:18.017, price=null}
return result;
}
如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!