ssh整合操作遇到的问题

我心java 发布于 2012/09/25 21:15
阅读 287
收藏 0

用ssh整合是,实行更新操作时,如果字段较多的话,用没有简便方法实行更新,现在我都是用

Member mb=memberService.loadmember(member.getId());
   mb.setBridth(member.getBridth());mb.setByxx(member.getByxx());mb.setEmail(member.getEmail());
   mb.setGccc(member.getGccc());mb.setGcdw(member.getGcdw());mb.setGcmc(member.getGcmc());
   mb.setGcpzsj(member.getGcpzsj());mb.setGj(member.getGj());mb.setGzdz(member.getGzdz());
   mb.setJg(member.getJg());mb.setJthm(member.getJthm());mb.setKxfl(member.getKxfl());
   mb.setMz(member.getMz());mb.setPawword(member.getPawword()); mb.setPzbm(member.getPzbm());
   mb.setRxsj(member.getRxsj());mb.setRygh(member.getRygh());mb.setRyxb(member.getRyxb());
   mb.setRyxm(member.getRyxm());mb.setRyzt(member.getRyzt());mb.setScore(member.getScore());
   mb.setSfys(member.getSfys());mb.setSfbd(member.getSfbd());mb.setSjhm(member.getSjhm());mb.setSsxk(member.getSsxk());
   mb.setXl(member.getXl());mb.setXw(member.getXw());mb.setYjfx(member.getYjfx());
   mb.setZwwy(member.getZwwy());mb.setZc(member.getZc());mb.setZwlb(member.getZwlb());mb.setZy(member.getZy());mb.setZzmm(member.getZzmm());
   memberService.saveOrupdate(mb);

感觉这样做很麻烦,代码很多,那位大仙能给我提供一个简便方法

加载中
0
designer
designer

之前的公司也是用SSH开发的,修改有一百多个字段,其实就该了里面的几个字段而且,受不了就自己写了个工具来帮忙处理了,希望对你有用!

   @SuppressWarnings("rawtypes")
    public static Boolean isEmpty(Object obj) {

        if (obj == null) {
            return Boolean.TRUE;
        }
        // 字符序列集
        if ((obj instanceof CharSequence) && "".equals(obj.toString().trim())) {
            return Boolean.TRUE;
        }
        // 单列集合
        if (obj instanceof Collection) {
            return ((Collection) obj).isEmpty();
        }
        // 双列集合
        if (obj instanceof Map) {
            return ((Map) obj).isEmpty();
        }

        if (obj instanceof Iterable) {
            return ((Iterable) obj).iterator() == null
                    || !((Iterable) obj).iterator().hasNext();
        }

        // 迭代器
        if (obj instanceof Iterator) {
            return !((Iterator) obj).hasNext();
        }

        // 文件类型
        if (obj instanceof java.io.File) {
            return !((java.io.File) obj).exists();
        }
        // 数组
        return (obj instanceof Object[]) && ((Object[]) obj).length == 0;

    }

    /*
      * 对象属性拷贝
      * @author <a href="mailto:netdesignboy@qq.com">Ben</a>
      * @param destObj 拷贝目标实例 || 子类
      * @param srcObj 拷贝源实例 || 夫类
      * @throws Exception
      * @return void
      * @see <b>拷贝两个对象的值,参数一:拷贝源,参数二:拷贝目标</b></br>
      * <b>拷贝源里为空(或List不能为单size为0)的属性值将不会往目标对象里拷贝
      * 注意如果传入的两个对象有继承关系,则:第一个参数destObj为子类,第二个参数srcObj为父类。参数顺序不能颠倒! </b>
      * @since 1.0
      */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static void copyProperties(Object destObj, Object srcObj)
            throws Exception {
        if (isEmpty(destObj) || isEmpty(srcObj)) {
            throw new IllegalArgumentException("拷贝源对象和拷贝目标对象不能为空!");
        }

        // 两个类型一样不执行,否则判断srcObj是否是destObj的父类!
        if (destObj.getClass() != srcObj.getClass()
                && destObj.getClass().getSuperclass() != srcObj.getClass()) {
            throw new IllegalArgumentException("拷贝源对象和拷贝目标对象不是相同的类型或拷贝目标对象不是拷贝源对象的子类");
        }

        // 拿到拷贝源上的属性器数组
        PropertyDescriptor[] srcObjPds = Introspector.getBeanInfo(srcObj.getClass()).getPropertyDescriptors();

        for (int i = 0; srcObjPds.length > 1 && i < srcObjPds.length; i++) {
            if ("class".equals(srcObjPds[i].getName())) {
                continue;
            }

            Object value = srcObjPds[i].getReadMethod().invoke(srcObj);// 拿到拷贝源上的该值
            if (isEmpty(value)) {
                continue;
            }

            // 避免集合浅拷贝(destObj和srcObj引用的是同一个集合)
            if (value instanceof List) {
                value = new ArrayList((List) value);
            } else if (value instanceof Set) {
                value = new LinkedHashSet((Set) value);
            } else if (value instanceof Map) {
                value = new HashMap((Map) value);
            }
            srcObjPds[i].getWriteMethod().invoke(destObj, value);
        }

    }

    public static Boolean notEmpty(Object obj) {
        return !isEmpty(obj);
    }

你只需要: copyProperties(mb,member); 即可!前提的你这个类的字段有get和set方法

0
shuaia
shuaia
Commons有个叫beanutils的东东。能干这是。。
0
designer
designer
那个集合是浅拷贝,与hibernate操作会出问题,还有关于日期等操作很麻烦,自己写转换器什么的..于是就直接写了个基本内省方式的属性拷贝!
designer
designer
回复 @jeffsui : 比如Person对象里有个List<Hobby> hobbies;属性,是个List集合,那么用beanutils的话拷贝源对象和拷贝目标对象引用的是同一个集合,这本来没有,但是如果这个属性有变动(和数据库里的不一致)用hibernate操作的话会出问题...
jeffsui
jeffsui
哦,能给我个参考吗
0
我心java
我心java

好的,谢谢各位大侠,问题解决了

返回顶部
顶部