packagecom.example.demo.utils;importjava.lang.reflect.Method;importjava.util.List;importcom.example.demo.domain.Users;importcom.example.demo.model.UsersModel;public classDto2Entity {/***
* 将dto和entity之间的属性互相转换,dto中属性一般为String等基本类型,
*
* 但是entity中可能有复合主键等复杂类型,需要注意同名问题
*
*@paramsrc
*
*@paramtarget*/
public staticObject populate(Object src, Object target) {
Method[] srcMethods=src.getClass().getMethods();
Method[] targetMethods=target.getClass().getMethods();for(Method m : srcMethods) {
String srcName=m.getName();if (srcName.startsWith("get")) {try{
Object result=m.invoke(src);for(Method mm : targetMethods) {
String targetName=mm.getName();if (targetName.startsWith("set")&& targetName.substring(3, targetName.length())
.equals(srcName.substring(3, srcName.length()))) {
mm.invoke(target, result);
}
}
}catch(Exception e) {
}
}
}returntarget;
}/***
* dto集合和实体类集合间的互相属性映射
*
*@paramsrc
*
*@paramtarget
*
*@paramtargetClass
*
*@return
*/@SuppressWarnings("unchecked")public static List populateList(List src, Listtarget,
Class>targetClass) {for (int i = 0; i < src.size(); i++) {try{
Object object=targetClass.newInstance();
target.add((T) object);
populate(src.get(i), object);
}catch(Exception e) {continue;//某个方法反射异常
}
}returntarget;
}public static voidmain(String[] args) {
Users users= newUsers();
users.setId(1);
users.setUsername("huang");
users.setPassword("123456");
UsersModel usersModel= newUsersModel();
usersModel=(UsersModel) Dto2Entity.populate(users,usersModel);
System.out.println(usersModel.toString());
}
}
该博客介绍了一个Java工具类`Dto2Entity`,用于通过反射将DTO(Data Transfer Object)对象的属性值复制到Entity实体类中。方法包括单个对象的转换和对象集合的批量转换。在转换过程中,注意了属性名称的匹配和处理可能出现的反射异常情况。通过示例展示了如何使用该工具类将`Users`实体转换为`UsersModel` DTO。
754

被折叠的 条评论
为什么被折叠?



