专栏首页码字搬砖java反射的简单使用

java反射的简单使用

前几天项目中遇到一个相对有意思的事情,那就是一个InsertHbase的工具类接收一个对象,然后获取到对象的每一个属性及其值,最后Insert到Hbase中 如:

public class People{

    private String name;
    private int age;

    public People(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

获取到对象的每一个属性及其值,最后Insert到Hbase中

/**
 * Created by shengjk1 on 2016/6/13.
 */
public class ObjInsertHbase {
    private static Logger logger = Logger.getLogger(ObjInsertHbase.class);

    /**
     * @param mapObj <rowkey,Object>
     * @param table_name
     * @throws Exception
     */
    public static void insert(Map<String,Object>mapObj, String table_name) throws Exception {
        if (mapObj.size() < 1 || StringUtils.isBlank(table_name)) {
            throw new RuntimeException("insertHbase 参数不符合要求: mapObj.size() .size():" + mapObj.size()  + "  table_name:" + table_name);
        }

        Table table = null;
        Connection conn = null;
        try {

            long c = System.currentTimeMillis();

            PropertiesConfiguration pro = new PropertiesConfiguration("conf.properties");
            String zkquorum = pro.getString("hbase.zookeeper.quorum");

            Configuration config = HBaseConfiguration.create();


            config.set("hbase.zookeeper.quorum", zkquorum);
            conn = ConnectionFactory.createConnection(config);
            table = conn.getTable(TableName.valueOf(table_name));

            List<Put> putList=new ArrayList();

            if (mapObj.keySet().size()<1 || mapObj.values().size()<1){
                logger.error("insert hbase传入map有误");
                throw new RuntimeException("insert hbase传入map有误");
            }

            for (String key : mapObj.keySet()) {


                Put put = new Put(key.getBytes());
                Object obj=mapObj.get(key);

                if (null==key|| null==obj){
                    throw new RuntimeException("数据错误 rowkey :"+key +" obj: "+obj);
                }

                /**
                 * 获取对象中的每一个字段
                 */
                Field[] fields = obj.getClass().getDeclaredFields();
                for (int i = 0, len = fields.length; i < len; i++) {

                    String varName = fields[i].getName();
                    boolean accessFlag = fields[i].isAccessible();
                    fields[i].setAccessible(true);
                    Object o = fields[i].get(obj) == null ? "" : fields[i].get(obj);
                    fields[i].setAccessible(accessFlag);

                    if (!varName.equalsIgnoreCase("serialVersionUID") && StringUtils.isNotBlank(varName)) {
                        logger.info("varName " + varName + "   o " + o);
                //Insert到hbase  
                    put.addColumn("f".getBytes(), varName.getBytes(), o.toString().getBytes());
                    } else {
                        logger.error("varName 属性名获取失败");
                        throw new RuntimeException("varName 属性名获取失败");
                    }

                    putList.add(put);
                }
            }
            table.put(putList);


            long b = System.currentTimeMillis();

            logger.info("insert hbase ======== " + (b - c) + " 毫秒");
        } finally {
            table.close();
            conn.close();
        }
    }

}

Hbase中结果:

a                              column=f:age, timestamp=1475072798158, value=12                                         
 a                              column=f:name, timestamp=1475072798158, value=ad                                        
 a0                             column=f:error, timestamp=1475080718658, value=aa                                       
 a1                             column=f:age, timestamp=1475079642084, value=12                                         
 a1                             column=f:name, timestamp=1475079642084, value=                                          
 a11                            column=f:age, timestamp=1475080206238, value=12                                         
 a11                            column=f:name, timestamp=1475080206238, value=                                          
 a2                             column=f:age, timestamp=1475079642084, value=121                                        
 a2                             column=f:name, timestamp=1475079642084, value=a 

方便以后建二级索引

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 再论:关于 equals 和 hashCode

    上篇 关于 equals 和 hashCode 关于 equals 和 hashCode 的基本性质已经论述过了。

    shengjk1
  • Comparator 和 Comparable的区别

    1.位置 Comparable 位于 java.lang,我们都知道 java.lang包可以说是 java体系中基础包,有 ClassLoader、Clas...

    shengjk1
  • spring注解是如何实现的

    用过spring的人都知道,spring简单的通过注解就可以完成很多时间,但这些东西是如何实现的呢以及如何应用到我们自己的代码中?接下来,让我们一起开启注解的旅...

    shengjk1
  • 格式化输出

    比如要求用户输入用户名和年龄,然后打印如下格式:My name is xxx,my age is xxx.

    py3study
  • c++之类模板和函数模板的区别

    绝命生
  • c#中的静态本地方法

    在 C# 8 中微软增加了静态本地方法,这种类型的方法无法获取和修改任何本地变量和实例成员。下面我们来看一下这种方法的具体用法。 首先我们来看一下普通的方法:

    喵叔
  • c++之结构体

    绝命生
  • ES6特性之:类

    面向对象编程是一个很流行也很让人容易理解的方法。面向对象编程中的一个核心概念就是类,我们可以把事物都抽象成一个个的类来描述他们的信息和行为。

    一斤代码
  • 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库。本文介绍使用Spring D...

    用户1177380
  • 如何删除重复数据(二)

    上一篇我们介绍了在有主键的表中删除重复数据,今天就介绍如何删除没有主键的表的重复数据。

    白日梦想家

扫码关注云+社区

领取腾讯云代金券