zoukankan      html  css  js  c++  java
  • mongodb中Gson和java##Bean对象转化类

    此类使用感觉比较繁琐, 每个字段加注解才可以使用, 不如mongoTemplate使用方便, 但如果使用mongo客户端的话, 还是比手动拼接快一点, 所以贴在这儿

    package com.iwhere.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;
    /**
     * DBObject 和 javaBean之間轉換
     * @author 231
     */
    public class ConvertDBObject {
    
        /**
         * 把实体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) {
                org.springframework.data.mongodb.core.mapping.Field anno = field
                        .getAnnotation(org.springframework.data.mongodb.core.mapping.Field.class);
                // 获取属性名
                String varName = field.getName();
    
                if ("serialVersionUID".equals(varName) || "_id".equals(varName)) {
                    continue;
                }
    
                // 获取注解的值
                varName = anno.value();
                // 修改访问控制权限
                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();
                org.springframework.data.mongodb.core.mapping.Field anno = field
                        .getAnnotation(org.springframework.data.mongodb.core.mapping.Field.class);
                if ("serialVersionUID".equals(varName) || "_id".equals(varName)) {
                    continue;
                }
    
                String fieldName = anno.value();
                Object object = dbObject.get(fieldName);
                if (object != null) {
                    BeanUtils.setProperty(bean, varName, object);
                }
            }
            return bean;
        }
    }
  • 相关阅读:
    闯荡Linux帝国:nginx的创业故事
    一个HTTP数据包的奇幻之旅
    远去的传说:安全软件群雄混战史
    默认浏览器争霸传奇
    浏览器主页锁定之战——IE:我太难了
    产品vs程序员:你知道www是怎么来的吗?
    手把手教你从零开始搭建SpringBoot后端项目框架
    使用IntelliJ IDEA新建Java Web后端resfulAPI模板
    如何正确的在项目中接入微信JS-SDK
    html2canvas关于图片不能正常截取
  • 原文地址:https://www.cnblogs.com/wenbronk/p/6482720.html
Copyright © 2011-2022 走看看