MONGODB(四)——DBObject与JavaBean转换-程序员宅基地

技术标签: java  数据库  

一、DBObject 转为 JavaBean

   /**
     * 将实体Bean对象转换成DBObject
     * 
     */
    public static <T> DBObject beanToDBObject(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;
    }

 

二、 JavaBean转为DBObject 

      /**
     * 将DBObject转换成Bean对象
     * 
     */
    public static <T> T dbObjectToBean(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;
    }

    // 取出Mongo中的属性值,为bean赋值
    public static <T> void setProperty(T bean, String varName, T object) {
        varName = varName.substring(0, 1).toUpperCase() + varName.substring(1);
        try {
            String type = object.getClass().getName();
            // 类型为String
            if (type.equals("java.lang.String")) {
                Method m = bean.getClass().getMethod("get" + varName);
                String value = (String) m.invoke(bean);
                if (value == null) {
                    m = bean.getClass()
                            .getMethod("set" + varName, String.class);
                    m.invoke(bean, object);
                }
            }
            // 类型为Integer
            if (type.equals("java.lang.Integer")) {
                Method m = bean.getClass().getMethod("get" + varName);
                String value = (String) m.invoke(bean);
                if (value == null) {
                    m = bean.getClass().getMethod("set" + varName,
                            Integer.class);
                    m.invoke(bean, object);
                }
            }
            // 类型为Boolean
            if (type.equals("java.lang.Boolean")) {
                Method m = bean.getClass().getMethod("get" + varName);
                String value = (String) m.invoke(bean);
                if (value == null) {
                    m = bean.getClass().getMethod("set" + varName,
                            Boolean.class);
                    m.invoke(bean, object);
                }
            }
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (IllegalArgumentException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        }
    }

 

转载于:https://www.cnblogs.com/fonxian/p/5204929.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/a5678110/article/details/102048493

智能推荐

十一届中国大学生计算机设计大赛,我校在2018年(第十一届)中国大学生计算机设计大赛中再获佳绩...-程序员宅基地

文章浏览阅读214次。7月至8月,第十一届中国大学生计算机设计大赛在南京、上海和杭州等八个分赛区举行。我校现代教育技术中心负责人带领17名学生携6件作品参加了此次大赛。经过紧张、激烈的技能测试和现场答辩,我校荣获1个二等奖、5个三等奖的好成绩。本届全国大学生计算机设计大赛的参赛作品共分软件应用与开发、微课与教学辅助和数字媒体设计等九个大类,同时又细分为移动应用开发、物联网与智能设备、微电影、数字短片、纪录片等多个小类。..._2018全国计算机大学生设计大赛杭州

vue-cli打包后文件路径错误解决方案_ci打包 @路径问题-程序员宅基地

文章浏览阅读1.7k次。使用vue-cli构建的项目打包后字体图标路径错误预计路径是 xxx/static/fonts/icomoon.xxxxx.woff实际情况却是这样的xxx/static/css/static/fonts/icomoon.xxxxx.woff刚开始碰上这种情况很懵逼 不知道怎么解决 每次打包后都要去手动改路径后来研究了一下 发现是因为改了config目录里面的index.jsbuild..._ci打包 @路径问题

配置Ubuntu交叉编译环境-程序员宅基地

文章浏览阅读1w次,点赞13次,收藏76次。Ubuntu搭建交叉编译环境以及相关问题解决1.交叉编译器安装资源考虑到大多数人使用的是64位Ubuntu,以及能够更好运行,我在此提供了62位的arm-linux-gcc交叉编译器。(如果你的Linux系统是64位的,但安装32位的交叉编译器,还需要额外安装32位的运行库。)我在此提供的是:arm-2009q3.tar.bz2,附上百度网盘下载链接:链接:https://pan.baidu.com/s/1z_jKxXyLftHfszvaYH-SoA提取码:yccy2.安装步骤以及问题解决在主_ubuntu交叉编译

如何在日常工作中开发测试工具?_测试工具开发-程序员宅基地

文章浏览阅读2.2k次,点赞3次,收藏3次。业务测试同学如何在工作中开发测试工具?_测试工具开发

Python在振动信号处理中的应用(五):振动加速度信号转换为速度或位移信号_py将加速度信号积分为速度信号-程序员宅基地

文章浏览阅读8.2k次,点赞5次,收藏24次。文章目录一、概述二、算法原理2.1 时域积分2.1 频域处理三、Python在中相关函数3.1 scipy.interger介绍3.2 scipy.fftpack介绍四、python代码实现4.1 时域积分3.2 频域处理四、TIPS一、概述  有实际测试经验的工程人员都知道,在很多情况下振动位移的测试是非常麻烦的,甚至有的情况下振动位移都无法直接进行测试。例如,在振动台上进行高层楼房模型试验时,要测试模型上的测点相对振动台台面的振动位移就十分困难,即使是测试绝对位移,也需要在振动台四周搭建传感器安装_py将加速度信号积分为速度信号

查找二叉树、完全二叉树、线索二叉树、最优二叉树_二叉树 完全二叉树 查找二叉树-程序员宅基地

文章浏览阅读3.3k次,点赞30次,收藏38次。提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、查找二叉树(二叉排序树)二、完全二叉树前言2021年上半年 软件设计师 上午试卷中有这样一道题58.当二叉树的结点数目确定时,________的高度一定是最小的。A.二叉排序树 B.完全二叉树 C.线索二叉树 D.最优二叉树我已此为契机,了解一下查找二叉树、完全二叉树、线索二叉树、最优二叉树的一些相关定义(此题结尾会给出答案详解)一、查找二叉树(二叉排序树)二叉排序树的定义:1、若根结点的左子树._二叉树 完全二叉树 查找二叉树

随便推点

tensorflow+python flask进行手写识别_TensorFlow与Flask结合识别手写体数字-程序员宅基地

文章浏览阅读207次。阅读本文约“2.2分钟”TensorFlow框架——TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统——可被用于语音识别或图像识别等多项机器学习和深度学习领域——TensorFlow是将复杂的数据结构传输至人工智能神经网中进行分析和处理过程的系统——TensorFlow支持CNN、RNN和LSTM算法,这都是目前在Image,Speech和NLP最流行的深度神经网..._flask基于tensorflow1.14项目

Flink Table Api 将数据写出到mysql_flink 读取s3-程序员宅基地

文章浏览阅读9.5k次。Flink Table Api 将数据写出到mysql_flink 读取s3

QClipboard类文档_qt使用qclipboard的clear方法无法清除数据-程序员宅基地

文章浏览阅读407次。QClipboard类提供了对窗口系统剪贴板的访问。#include "qclipboard.h"继承了QObject。所有成员函数的列表。公有成员void clear()bool supportsSelection () constbool ownsSelection() constbool ownsClipboard() con..._qt使用qclipboard的clear方法无法清除数据

mybatis_plus获取批量插入id_mybatisplus批量插入获取id-程序员宅基地

文章浏览阅读1.4k次。mybatis_plus获取批量插入id_mybatisplus批量插入获取id

将date命令结果转换为yyyymmdd日期格式_date转yyyy-mm-dd-程序员宅基地

文章浏览阅读3.3k次。date -d yesterday '+%Y%m%d' 以yyyymmdd格式显示昨天日期date -d today '+%Y%m%d' 以yyyymmdd格式显示当天日期date -d tomarrow '+%Y%m%d' 以yyyymmdd格式显示明天日期_date转yyyy-mm-dd

日常BUG ——乱码-程序员宅基地

文章浏览阅读1.5k次。日常问题定位分析。

推荐文章

热门文章

相关标签