java 使用反射在dto和entity 实体类之间进行转换

本文介绍了一种在Java中实现DTO(Data Transfer Object)与Entity间属性转换的方法。通过反射机制,该方法能自动将DTO对象的属性值复制到对应的Entity对象中,同时也支持从Entity到DTO的转换。此外,还提供了一个示例,展示了如何使用此工具类完成转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.example.demo.utils;

import java.lang.reflect.Method;
import java.util.List;

import com.example.demo.domain.Users;
import com.example.demo.model.UsersModel;

public class Dto2Entity {

    /**
     * 
     * 将dto和entity之间的属性互相转换,dto中属性一般为String等基本类型,
     * 
     * 但是entity中可能有复合主键等复杂类型,需要注意同名问题
     * 
     * @param src
     * 
     * @param target
     */

    public static Object 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) {

                }

            }

        }

        return target;

    }

    /**
     * 
     * dto集合和实体类集合间的互相属性映射
     * 
     * @param src
     * 
     * @param target
     * 
     * @param targetClass
     * 
     * @return
     */

    @SuppressWarnings("unchecked")
    public static <S, T> List<T> populateList(List<S> src, List<T> target,
            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;// 某个方法反射异常

            }

        }

        return target;

    }
    
    public static void main(String[] args) {
        Users users = new Users();
        users.setId(1);
        users.setUsername("huang");
        users.setPassword("123456");
        UsersModel usersModel = new UsersModel();
        usersModel = (UsersModel) Dto2Entity.populate(users,usersModel);
        System.out.println(usersModel.toString());
    }

}

 

转载于:https://www.cnblogs.com/huangjinyong/p/9301497.html

好的,以下是一个使用Java代码实现DTOEntity转换的示例: 首先,定义DTOEntity: ```java public class UserDTO { private Long id; private String username; private String email; // gettersetter方法 } public class UserEntity { private Long id; private String username; private String email; // gettersetter方法 } ``` 然后,在应用程序中创建一个转换器类,用于将DTO转换Entity: ```java public class UserConverter { public UserEntity toEntity(UserDTO dto) { UserEntity entity = new UserEntity(); entity.setId(dto.getId()); entity.setUsername(dto.getUsername()); entity.setEmail(dto.getEmail()); return entity; } } ``` 在转换器中,我们通过将DTO的属性值设置到Entity对象中来实现转换。 接下来,我们可以创建一个方法来测试转换器: ```java public static void main(String[] args) { UserDTO dto = new UserDTO(); dto.setId(1L); dto.setUsername("john"); dto.setEmail("john@example.com"); UserConverter converter = new UserConverter(); UserEntity entity = converter.toEntity(dto); System.out.println(entity.getId()); // 输出 1 System.out.println(entity.getUsername()); // 输出 "john" System.out.println(entity.getEmail()); // 输出 "john@example.com" } ``` 在这个示例中,我们首先创建了一个UserDTO对象,然后使用转换器将其转换为UserEntity对象,并验证了转换结果。 最后,我们可以在代码中添加注释,以提高可读性可维护性: ```java /** * 用户DTO类 */ public class UserDTO { private Long id; private String username; private String email; // gettersetter方法 } /** * 用户实体类 */ public class UserEntity { private Long id; private String username; private String email; // gettersetter方法 } /** * 用户转换器类 */ public class UserConverter { /** * 将DTO对象转换Entity对象 * @param dto DTO对象 * @return Entity对象 */ public UserEntity toEntity(UserDTO dto) { UserEntity entity = new UserEntity(); entity.setId(dto.getId()); entity.setUsername(dto.getUsername()); entity.setEmail(dto.getEmail()); return entity; } } ``` 这样做可以帮助其他开发者更好地理解代码,并且在后续维护中更容易进行修改扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值