package com.paile.utils.beans; import java.lang.reflect.Field; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.sql.Timestamp; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Set; import java.util.Vector; import org.apache.commons.beanutils.BeanUtils; import com.mongodb.BasicDBList; import com.mongodb.DBCursor; import com.mongodb.DBObject; public class DBObjectToJavaBean { public static <T> List<T> cursorToList(DBCursor cursor, Class<T> clazz) throws Exception { List<T> list = new ArrayList<T>(); while (cursor.hasNext()) { DBObject dbObj = cursor.next(); T t = propertySetter(dbObj, clazz); list.add(t); } return list; } public static <T> T propertySetter(DBObject dbObj, Class<T> clazz) throws Exception { if (dbObj == null) return null; T t = clazz.newInstance(); recyleSetter(dbObj, t); return t; } /*** * 递归所有属性 * * @param dbObj * @param bean * @throws Exception */ private static void recyleSetter(DBObject dbObj, Object bean) throws Exception { Iterator<String> it = dbObj.keySet().iterator(); while (it.hasNext()) { String key = it.next(); Object value = dbObj.get(key); recyleValueJutisy(key, value, bean); } } @SuppressWarnings("rawtypes") private static void recyleValueJutisy(String key, Object value, Object bean) throws Exception { if (value instanceof BasicDBList) { BasicDBList dblist = (BasicDBList) value; Iterator<Object> it = dblist.iterator(); Class<?> type = null; try { type = getPropertyType(bean, key); List list = new ArrayList(); while (it.hasNext()) { Object object = it.next(); if (object instanceof DBObject) { DBObject dbItem = (DBObject) object; Object o = type.newInstance(); recyleSetter(dbItem, o); list.add(o); } else if (object instanceof String) { list.add(object); } } BeanUtils.setProperty(bean, key, list); } catch (NoSuchFieldException e) { } } else if (value instanceof DBObject) { DBObject dbItem = (DBObject) value; Class<?> type = getPropertyType(bean, key); Class tclazz = Timestamp.class; if (type == tclazz) { // 时间类型 Object otime = dbItem.get("time"); if (otime != null) { long time = Long.parseLong(String.valueOf(otime)); Timestamp st = new Timestamp(time); BeanUtils.setProperty(bean, key, st); } } else { Object o = type.newInstance(); recyleSetter(dbItem, o); BeanUtils.setProperty(bean, key, o); } } else { Class<?> clazz = bean.getClass(); Field field; try { field = clazz.getDeclaredField(key); if (field != null) { if (value != null) { if ("".equals(value)) { if (field.getType() == String.class) BeanUtils.setProperty(bean, key, value); } else { BeanUtils.setProperty(bean, key, value); } } } } catch (NoSuchFieldException e) { } } } /** * @param bean * @param key * @return * @throws Exception */ private static Class getPropertyType(Object bean, String key) throws Exception { Class<?> clazz = bean.getClass(); Field f = clazz.getDeclaredField(key); Class t = f.getType(); if (t.getName().startsWith("java.lang")) { return t; } if (t.isAssignableFrom(List.class) || t.isAssignableFrom(Set.class) || t.isAssignableFrom(Vector.class)) { Type gt = f.getGenericType(); if (gt == null) { return t; } if (gt instanceof ParameterizedType) { ParameterizedType pt = (ParameterizedType) gt; Class genericClazz = (Class) pt.getActualTypeArguments()[0]; if (genericClazz != null) { return genericClazz; } } } return t; } }
使用说明:
例如:想把一个DBOBject对象转换为UserBean:
UserBean user = DBObjectToJavaBean .propertySetter(dbObj,UserBean.class); //该方法支持多层Mongo对象的转化
相关推荐
MongoDB增删改查工具类,根据一个doc,来检索,当doc是空的时候检索全部 检索全部并返回迭代器 便利迭代器FindIterable /** * Dao 层接口 * */ public interface MongoDao { /** * Get Data BY ID * * @...
kotlin语言写mongodb连接工具类,没有用配置文件,kotlin语言写mongodb连接工具类,没有用配置文件
mongoDB工具类,实际项目开发中自己编写的,经测试无bug,放心使用
mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具mongodb 备份恢复工具...
java操作mongodb的工具类,增删查改方法
使用MongoDB需要对文档结构进行合理的设计,以满足某些特定需求。比如随机选取文档,使用skip跳过随机个文档就没有在文档中加个随机键, 然后使用某个随机数对文档进行查询高效,随机键还能添加索引,效率更高。合理...
mongodb安装文档和工具类
kotlin语言写的NSQ消费者接受数据,然后将数据存入mongodb缓存中(连接mongodb工具类及配置文件)
mongodb连接第三方工具
MongoDB、Java与对象关系映射 MongoDB、Java与对象关系映射
这个工具用的自我感觉还可以,方便操作,可视化,安装流程也很简单
mongodb管理工具,客户端连接工具, robomongo-1.0.0-rc1-windows-x86_64
MongoDB图形化管理工具 MongoDB Compass
C#MongoDb操作工具类,具体怎么操作,请看的文章: http://blog.csdn.net/lablenet/article/details/47257951
mongodb数据库可视化操作工具,操作数据库灰常简单!
mongodb现在是最火的缓存数据库,我这里提供的是mongodb的可视化工具,便于直接操作mongodb,希望对大家学习mongodb有所帮助
MongoDB数据库管理工具
Mongodb数据库安装包和可视化工具和robo3t-1.3.1安装包Mongodb和robo3t-1.3.1安装包