update数据时不更新前端为null的数据字段(反射解决方案)

在开发时,我们可能会遇到这样一个问题,就是前端传过来是表中的部分字段,如果用这个对象直接update就会导致数据库中我们不想被更新掉的数据,被更新为null了。

显然,这样的跟新并不是我们想要的结果。

解决方案一:

使用ifelse一个一个判断,这样的效率很低,而且有太多冗余的代码。

这个方法在此不做赘述。

解决方案二:

使用反射将前端传过来的数据,和查找出数据库中的数据,使用反射将该更新的数据更新。

    /**
     * 解决更新时,源对象被覆盖
     * @param src 数据库查出的源对象数据
     * @param desc 前端传的需要更新的数据
     * @return 更新后的对象
     * @throws Exception 源对象与目标对象类型不一致
     */
    public static Object updateBean(Object src,Object desc) throws Exception {
        Class srcClass = src.getClass();
        Class descClass = desc.getClass();
        if(!descClass.equals(srcClass)){
            throw new Exception("源对象与目标对象类型不一致!");
        }

        Field[] srcClassFields = srcClass.getDeclaredFields();
        Field[] descClassFields = descClass.getDeclaredFields();

        for (int i = 0; i < descClassFields.length; i++) {
            descClassFields[i].setAccessible(true);
            Object o = descClassFields[i].get(desc);
            if(o != null && !"".equals(o.toString().trim())){
                srcClassFields[i].setAccessible(true);
                srcClassFields[i].set(src, o);
            }
        }

        return src;
    }

1.首先获得两个对象的所有方法

2.遍历目标对象的所有get方法,如果有值,则获取源对象的set方法

你可能感兴趣的:(Java,反射,Java学习,java,反射)