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对象的转化
相关推荐
完全面向对象的mongo封装,maven工程源码,可直接install导出jar包引用,支持基本的增删改查和分页等,使用反射对javaBean实体进行映射,所有方法参数只需要传javaBean就行了,支持带密码连接,即拿即用,无需修改。
接下来,我们通过 `@SpringBootTest` 和 `@RunWith(SpringRunner.class)` 注解创建一个测试类 `MongoTest`,并利用 `@Autowired` 注解注入 `MongoTemplate` 对象: ```java import org.junit.Test; import org....
JSON到Java Bean转换工具,如"json2javabean"和"josnschema2pojo",是开发人员在处理JSON数据与Java对象之间转换时的便利工具。这些工具能够根据JSON格式的数据自动生成对应的Java类,使得数据绑定变得更加简单和...
16进制工具(HexUtil)、Escape工具(EscapeUtil)、Hash算法(HashUtil)、URL工具(URLUtil)、XML工具(XmlUtil)和对象工具(ObjectUtil)都提供了对应处理功能的工具类。 反射工具(ReflectUtil)、泛型类型...
8. **模板工具类增强**:FtlUtils工具类新增了一些方法,简化了模板配置的操作。 9. **中文参数支持**:Apache-commons包进行了全面升级,ini配置文件现在支持中文写入和显示,提高了对中文环境的兼容性。 10. **...
【标题】"网上购物系统(JavaBean+Servlet+jsp)"是一个基于Java技术栈开发的电子商务应用程序,它利用了JavaBean、Servlet和JSP(JavaServer Pages)这三种核心技术来实现前端用户界面、业务逻辑处理以及数据存储交互...
8、FtlUtils工具类添加一些新的方法,方便模板配置 9、Apache-commons包全面升级,ini配置文件中的参数支持中文写入和显示 10、修复已知Bug并进行了一些优化 官 网:http://www.tablego.cn 码 云:...
这里我们主要探讨几个重要的概念:面向bean编程、面向切面编程、面向对象编程,以及与Hadoop、HBase、Hive、Storm、MongoDB和Struts2相关的知识点。 1. **面向bean编程**(Bean Oriented Programming):虽然这个...
Java Web 是一种用于开发Web应用程序的技术栈,它主要基于Java语言,结合了Servlet、JSP(JavaServer Pages)和JavaBean等组件。在这个简陋的网站页面中,我们可以推测其核心是利用这些技术来实现基本的网页展示和...
首先,课程可能会从基础的Java编程语言开始,讲解面向对象编程的概念,包括类、对象、继承、封装和多态性。这为后续的Web开发打下坚实的基础。接着,会深入到Servlet和JSP,解释它们在动态网页生成中的作用,以及...
Java的`java.lang.Thread`类和`java.util.concurrent`包提供了丰富的多线程支持,包括线程的创建、同步和协作。`synchronized`关键字用于控制并发访问,`wait()`、`notify()`和`notifyAll()`方法则用于线程间的通信...
在Java Web开发中,这样的文件可能与数据库设计有关,比如用Mongoose(一个MongoDB对象数据模型库)在Node.js环境中创建的数据模型文件,或者可能是使用某种特定的数据分析工具所创建的模型。 学习Java Web开发通常...
综上所述,准备阿里巴巴的Java面试需要扎实的编程基础,深入理解Java核心技术,熟悉常用的框架和工具,以及具备一定的算法和数据结构知识。通过认真研究提供的笔试试题,求职者可以有针对性地提升自己的技能,提高...
4. **JavaBean**:JavaBean是一种符合特定规范的Java类,通常用于封装数据和提供简单的业务逻辑。在这个系统中,JavaBean可能代表图书实体,包含属性如书名、作者、出版社等,以及对应的getter和setter方法。 5. **...
在这个项目中,JavaBean可以代表用户、聊天室或者消息对象,它们的属性和方法可以被Servlet和JSP调用,进行数据操作。 4. **QQ协议**:为了实现QQ聊天功能,项目需要理解和实现QQ的通信协议。这可能涉及到网络编程...
这些标签库提供了一套完整的分页解决方案,只需在JSP页面中插入相应的标签,配合后台的JavaBean或Action类,就可以实现分页功能。DisplayTag支持多种定制,如排序、国际化等。 2. **Servlet + JSP**:通过Servlet...
JSP作为表现层,负责展示信息和接收用户输入,Servlet或JavaBean作为业务逻辑层处理请求,而数据库(如MySQL、Oracle等)用于存储和检索数据。 2. **用户认证与权限管理**:系统需要实现实名登录、权限控制,确保...
3. **JavaBean**:JavaBean是遵循特定规范的Java类,常作为可重用的组件,用于封装业务逻辑。在Web应用中,JavaBean可以存储和管理数据,提供给Servlet或JSP使用。 4. **MVC架构**:Model-View-Controller(模型-...
提供MongoDB工具实现对NoSQL的支持,支持负载均衡。 提供轻量级、快速响应的控制器,允许设置最大并发峰值,以确保在突如其来的并发攻击后能继续正常提供服务;也允许设置单IP最大并发量,确保小量IP并发攻击时仍能...