bean和DBObject相互转换的方法

package com.iqbon.spider.util;  

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.util.Date;  

import org.apache.commons.beanutils.BeanUtils;  

import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;  

public class BeanUtil {  

  /**
   * 把实体bean对象转换成DBObject
   * @param bean
   * @return
   * @throws IllegalArgumentException
   * @throws IllegalAccessException
   */
  public static <T> DBObject bean2DBObject(T bean) throws IllegalArgumentException,
      IllegalAccessException {
    if (bean == null) {
      return null;
    }
    DBObject dbObject = new BasicDBObject();
    // 获取对象对应类中的所有属性域
    Field[] fields = bean.getClass().getDeclaredFields();
    for (Field field : fields) {
      // 获取属性名
      String varName = field.getName();
      // 修改访问控制权限
      boolean accessFlag = field.isAccessible();
      if (!accessFlag) {
        field.setAccessible(true);
      }
      Object param = field.get(bean);
      if (param == null) {
        continue;
      } else if (param instanceof Integer) {//判断变量的类型
        int value = ((Integer) param).intValue();
        dbObject.put(varName, value);
      } else if (param instanceof String) {
        String value = (String) param;
        dbObject.put(varName, value);
      } else if (param instanceof Double) {
        double value = ((Double) param).doubleValue();
        dbObject.put(varName, value);
      } else if (param instanceof Float) {
        float value = ((Float) param).floatValue();
        dbObject.put(varName, value);
      } else if (param instanceof Long) {
        long value = ((Long) param).longValue();
        dbObject.put(varName, value);
      } else if (param instanceof Boolean) {
        boolean value = ((Boolean) param).booleanValue();
        dbObject.put(varName, value);
      } else if (param instanceof Date) {
        Date value = (Date) param;
        dbObject.put(varName, value);
      }
      // 恢复访问控制权限
      field.setAccessible(accessFlag);
    }
    return dbObject;
  }  

  /**
   * 把DBObject转换成bean对象
   * @param dbObject
   * @param bean
   * @return
   * @throws IllegalAccessException
   * @throws InvocationTargetException
   * @throws NoSuchMethodException
   */
  public static <T> T dbObject2Bean(DBObject dbObject, T bean) throws IllegalAccessException,
      InvocationTargetException, NoSuchMethodException {
    if (bean == null) {
      return null;
    }
    Field[] fields = bean.getClass().getDeclaredFields();
    for (Field field : fields) {
      String varName = field.getName();
      Object object = dbObject.get(varName);
      if (object != null) {
        BeanUtils.setProperty(bean, varName, object);
      }
    }
    return bean;
  }
} 

出自:http://iqbon.iteye.com/blog/1756118

时间: 2024-10-01 21:44:31

bean和DBObject相互转换的方法的相关文章

BeanUtils.populate(Object bean,Map properties)的使用方法

BeanUtils位于org.apache.commons.beanutils.BeanUtils下面,其方法populate的作用解释如下: 完整方法: BeanUtils.populate( Object bean, Map properties ), 这个方法会遍历map<key, value>中的key,如果bean中有这个属性,就把这个key对应的value值赋给bean的属性.

Spring -- spEL&amp;Bean的生命周期&amp;工厂方法配置Bean

对于学习spring有帮助的网站:http://jinnianshilongnian.iteye.com/blog/1482071 Spring表达式语言:SpEL Spring 表达式语言(简称SpEL):是一个支持运行时查询和操作对象图的强大的表达式语言. 语法类似于 EL:SpEL 使用 #{-} 作为定界符,所有在大框号中的字符都将被认为是 SpEL SpEL 为 bean 的属性进行动态赋值提供了便利 通过 SpEL 可以实现: 1.通过 bean 的 id 对 bean 进行引用 2

【Spring实战】—— 4 Spring中bean的init和destroy方法讲解

本篇文章主要介绍了在spring中通过配置init-method和destroy-method方法来实现Bean的初始化和销毁时附加的操作. 在java中,我们并不需要去管理内存或者变量,而在C或C++中,可以通过new和delete等方式来创建和删除变量或者对象.在Spring中,如果想要对一个bean进行初始化和结束附加一定的操作,则可以使用上述的两个方法来实现. 在介绍这两个方法前,读者需要了解Spring中bean的生命周期,最常使用的两种生命周期是:singleton和prototyp

JSR 303 - Bean Validation 简介及使用方法

一.JSR-303简介 JSR-303 是 JAVA EE 6 中的一项子规范,叫做 Bean Validation,官方参考实现是Hibernate Validator. 此实现与 Hibernate ORM 没有任何关系. JSR 303 用于对 Java Bean 中的字段的值进行验证. Spring MVC 3.x 之中也大力支持 JSR-303,可以在控制器中对表单提交的数据方便地验证. 注:可以使用注解的方式进行验证 二.准备校验时使用的JAR validation-api-1.0.

4.spriing:Bean的生命周期/工厂方法配置Bean/FactoryBean

1.Bean的生命周期 scope:singleton/prototype 1)spring容器管理singleton作用的生命周期,spring能够精确知道Bean合适创建,何时初始化完成,以及何时被销毁 2)spring容器管理prototype作用的生命周期,spring只负责创建,容器实例化之后就交给客户端进行管理,spring容器不会再 跟踪其生命周期. 可以借鉴servlet的生命周期"实例化--初始化--接受请求--销毁" Spring IOC容器可以管理Bean的生命周

java中数组与List相互转换的方法

1.List转换成为数组.(这里的List是实体是ArrayList) 调用ArrayList的toArray方法. toArray public <T> T[] toArray(T[] a)返回一个按照正确的顺序包含此列表中所有元素的数组:返回数组的运行时类型就是指定数组的运行时类型.如果列表能放入指定的数组,则返回放入此列表元素的数组.否则,将根据指定数组的运行时类型和此列表的大小分配一个新的数组. 如果指定的数组能容纳列表并有剩余空间(即数组的元素比列表的多),那么会将数组中紧跟在集合末

C# DataTable 和List之间相互转换的方法

一.List<T>/IEnumerable转换到DataTable/DataView private DataTable ToDataTable<T>(List<T> items) { var tb = new DataTable(typeof (T).Name); PropertyInfo[] props = typeof (T).GetProperties(BindingFlags.Public | BindingFlags.Instance); foreach (

关于数组和List之间相互转换的方法

1.List转换成为数组:返回数组的运行时类型.如果列表能放入指定的数组.否则,将根据指定数组.如果指定的数组的元素比列表的多),那么会将存储列表元素的数组. 返回:包含列表元素的list.add("2");final int size =  list.size();String[] arr = (String[])list.toArray(new String[size]); 2.为List.调用Arrays的asList方法.asListpublic static <T>

转 C# DataTable 和List之间相互转换的方法

一.List/IEnumerable转换到DataTable/DataView 方法一: /// <summary> /// Convert a List{T} to a DataTable. /// </summary> private DataTable ToDataTable<T>(List<T> items) {     var tb = new DataTable(typeof (T).Name);          PropertyInfo[]