随记

 @Override
    public T getEntity(Integer id) {
        
        return (T) sf.getCurrentSession().get(clazz, id);
    }

//下面是关于这个参数clazz的细节描述

在构造函数里面通过手段取得泛型化超类

/**这里重点说下泛型T,这是个抽象类,必然得有子类
    如果userDao extends BaseDaoImpl<User>
 *  如果OrderDao extends BaseDaoImpl<Order>
 *   所以这个泛型是让子类继承它的时候要在后边指定类型的,你一旦指定
 * 了这个类型,所有下边的方法里的参数就是这个类型了,非常方便,它是动态的
 * 
 * 但是我在超类当中我得拿到T的具体类型,这里怎么拿到T的类型呢?
 * 
 * 在java基础中讲过,一个对象的创建包括整个家族树的创建
 * UserDaoImpl在创建的时候要走构造函数,构造函数中的第一条语句要么
 * 是super要么是this,super:是调用父类的构造函数
 *                      this:是调用自己的另外的构造函数
 * 所以在超类的构造函数当中,你就有机会拿到子类的信息,
 * this取的是子类的对象
 * UserDaoImpl{
 *     super();   this();
 * }
 * 
**/
public abstract class BaseDaoImpl<T> implements BaseDao<T> {
    
    SessionFactory sf;
    //在这里加了一个构造函数 我不管你是User还是Order类,它们的构造都得调用
    //父类的构造,在这里父类的构造函数里面this.getClass()取的是子类的描述符
    //genericSuperclass 得到泛型化超类  然后再得到泛型化参数
    
    private Class clazz;
    public BaseDaoImpl(){
        ParameterizedType type = (ParameterizedType) this.getClass().getGenericSuperclass();
        clazz = (Class) type.getActualTypeArguments()[0];
    }
    
    @Override
    public void save(T t) {
        
        
    }

    @Override
    public void saveEntity(T t) {
        // TODO Auto-generated method stub
        sf.getCurrentSession().save(t);
    }

    @Override
    public void updateEntity(T t) {
        // TODO Auto-generated method stub
        sf.getCurrentSession().update(t);
    }

    @Override
    public void deleteEntity(T t) {
        // TODO Auto-generated method stub
        sf.getCurrentSession().delete(t);
    }
    
    //这个属于批量写操作 update users set name =? where ?
    @Override
    public void executeByHQL(String hql, Object... objects) {
        // TODO Auto-generated method stub
        Query q = sf.getCurrentSession().createQuery(hql);
        for(int i=0;i<objects.length;i++){
            q.setParameter(i, objects[i]);
        }
        q.executeUpdate();
    }

    @Override
    public T getEntity(Integer id) {
        //这里是关于这个参数clazz的细节描述
        return (T) sf.getCurrentSession().get(clazz, id);
    }

    @Override
    public List<T> findByHQL(String hql, Object... objects) {
        // TODO Auto-generated method stub
        return null;
    }

}

 

 

 

  while(it.hasNext()){   // 这里指的就是一行row      hbase
            Result r = it.next();
            //得到列族的集合
            NavigableMap<byte[], byte[]> map = r.getFamilyMap(Bytes.toBytes("f1"));
            //对集合进行遍历,集合中的每个元素是Entry
            for(Map.Entry<byte[],byte[]> entrySet :map.entrySet()){

进入r.getFamilyMap
/**
    Map of qualifier to values 列到值得映射
**/

 public NavigableMap<byte[], byte[]> getFamilyMap(byte[] family) {
             这是列  这是值


//返回值是        这个数组-》这个数组的映射


                    
                    这是列名             long这是时间戳   byte[]是值
public NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> getMap() {
           这是列族 这个是这个列族下的所有列以及它的值

 @Test
    public void scan3() throws IOException {
        //创建conf对象
        Configuration conf = HBaseConfiguration.create();
        //通过连接工厂创建连接对象
        Connection conn = ConnectionFactory.createConnection(conf);
        //通过连接查询tableName对象
        TableName tname = TableName.valueOf("ns1:t1");
        Table table = conn.getTable(tname);
        Scan scan =new Scan();
        //可以指定区间来扫描
        scan.setStartRow(Bytes.toBytes("row0000001"));
        scan.setStopRow(Bytes.toBytes("row0000100"));
        final ResultScanner rs = table.getScanner(scan);
        Iterator<Result> it = rs.iterator();
        while(it.hasNext()){
            Result r = it.next();
            //这里是得到一行的所有map
            //key(byte[])就是列族  value=Map<Col,Map<Timestamp,value>> 这个列下有很多版本
            NavigableMap<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> map =r.getMap();
            //对它进行迭代,每一个都是一个Entry 类型是  byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>
            for(Map.Entry<byte[], NavigableMap<byte[], NavigableMap<Long, byte[]>>> entrySet:map.entrySet()){
                //这里就拿到了key即列族
                String family = Bytes.toString(entrySet.getKey());
                //这里拿到的值就是所有列的数据的map
                NavigableMap<byte[], NavigableMap<Long, byte[]>> colDataMap = entrySet.getValue();
                for(Map.Entry<byte[], NavigableMap<Long, byte[]>> ets:colDataMap.entrySet()){
                    // 这里拿到key即列
                    String col = Bytes.toString(ets.getKey());
                    //再拿到值,还是一个map 这是一个时间戳和值
                    NavigableMap<Long, byte[]> valueMap = ets.getValue();
                    //因为key是时间戳value是byte[]
                    for(Map.Entry<Long,byte[]> e:valueMap.entrySet()){
                        Long key = e.getKey();
                        String value =Bytes.toString(e.getValue()) ;
                    }
                }
            }

        }

    }

 

 

 

Hbase 基本操作类 static { //此处可以使用hbase的配置文件,也可以通过代码来实例化hbase连接 /* * Configuration HBASE_CONFIG = new Configuration(); * HBASE_CONFIG.set("hbase.zookeeper.quorum", "10.229.171.45"); * HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); * HBASE_CONFIG.set("hbase.zookeeper.quorum","10.233.92.85,10.233.92.86,10.233.92.88"); * HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181"); * HBASE_CONFIG.set("zookeeper.znode.parent", "/hbase-unsecure"); conf = HBaseConfiguration.create(HBASE_CONFIG); */ conf = HBaseConfiguration.create(); if("kerberos".equals(conf.get("hbase.security.authentication"))){ try { //设置hadoop.security.authentication为kerberos conf.set("hadoop.security.authentication", "kerberos"); //获取kerberos配置文件路径(krb为kerberos配置文件) String krbStr=Thread.currentThread().getContextClassLoader().getResource("krb").getFile(); //获取用户票据hezhong路径(hezhong为给合众分配的用户配置文件) String keyStr=Thread.currentThread().getContextClassLoader().getResource("jdzy").getFile(); //初始化配置文件 System.setProperty("java.security.krb5.conf", krbStr); //使用用户hezhong登录 UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab("jdzy/f04345e6-70c1-448a-9bbb-4ac6b4c0109b@POLICE.COM", keyStr); } catch (IOException e) { e.printStackTrace(); } } tablePool = new HTablePool(conf, poolsize); logger.debug("create hbase connection success"); // System.out.println("create hbase connection success"); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值