map怎么转化dto_使用dozer将DTO转化为PO

DTO,就是Data Transfer Object,数据传输对象。

在开发中,经常需要将DTO转化为PO,可以使用dozer。

Maven

net.sf.dozer

dozer

5.5.1

Utils

工具类BeanMapperUtils 。

import java.util.Collection;

import java.util.List;

import com.google.common.collect.Lists;

import org.dozer.DozerBeanMapper;

public class BeanMapperUtils {

/**

* 持有Dozer单例, 避免重复创建DozerMapper消耗资源.

*/

private static DozerBeanMapper dozer = new DozerBeanMapper();

/**

* 基于Dozer转换对象的类型.

*/

public static T map(Object source, Class destinationClass) {

return dozer.map(source, destinationClass);

}

/**

* 基于Dozer转换Collection中对象的类型.

*/

public static List mapList(Collection> sourceList, Class destinationClass) {

List destinationList = Lists.newArrayList();

for (Object sourceObject : sourceList) {

T destinationObject = dozer.map(sourceObject, destinationClass);

destinationList.add(destinationObject);

}

return destinationList;

}

/**

* 基于Dozer将对象A的值拷贝到对象B中.

*/

public static void copy(Object source, Object destinationObject) {

dozer.map(source, destinationObject);

}

}

对象类

User.java如下:

注意,对象类一定要有一个无参数的构造方法。否则在转换对象时,会报错"java.lang.NoSuchMethodException"

public class User {

private String name;

private int age;

private BigDecimal score;

public User(String name, int age, BigDecimal score) {

this.name = name;

this.age = age;

this.score = score;

}

//注意,这个构造方法必须加上。

public User() {

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public BigDecimal getScore() {

return score;

}

public void setScore(BigDecimal score) {

this.score = score;

}

}

UserDTO.java,如下所示:

public class UserDTO {

private String name;

private String adress;

private int age;

private BigDecimal score;

private String description;

public UserDTO(String name, String adress, int age, BigDecimal score, String description) {

this.name = name;

this.adress = adress;

this.age = age;

this.score = score;

this.description = description;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAdress() {

return adress;

}

public void setAdress(String adress) {

this.adress = adress;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public BigDecimal getScore() {

return score;

}

public void setScore(BigDecimal score) {

this.score = score;

}

public String getDescription() {

return description;

}

public void setDescription(String description) {

this.description = description;

}

}

运用示例:

public class DTOTest {

public static void main(String[] args) {

UserDTO userDTO=new UserDTO("lin", "shenZhen", 26, BigDecimal.ONE, "test");

User user=BeanMapperUtils.map(userDTO,User.class);

System.out.println(user.getName()+","+user.getAge()+","+user.getScore());

}

}

其他

以上举的例子中,DTO和PO中相同含义的属性, 使用的是相同名称的变量,所以在工具类内部是可以直接转换的,

比如name,age,score。这几个在DTO和PO中,变量名都是相同的。

如果变量名是不同的,那么需要另外在xml或者类中进行配置。

这个后面再拓展。

原文:https://www.cnblogs.com/expiator/p/11614599.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值