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

复制代码
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());
    }

}
复制代码

 

posted @   黄进广寒  阅读(8215)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)
点击右上角即可分享
微信分享提示