phoenix-plugin项目开源

         摘要:phoenix-plugin是笔者自己封装的一个类似mybtis的orm框架,专门用来操作phoenix(一个基于hbase的数据库),项目地址:https://github.com/appleappleapple/phoenix-plugin

  下面来看看使用说明:

phoenix-plugin使用说明

一、概述

Phoenix-Plugin 是一个使用jdbc封装了操作Hbase的工具类.可以快速的进行增删改查操作

二、环境

开发环境:Eclipse luna + windows7
编译环境:JDK7 + maven

三、使用配置

1、pom文件引入

<dependency>  
  <groupId>com.github</groupId>  
  <artifactId>phoenix-plugin</artifactId>  
  <version>0.0.1-SNAPSHOT</version>  
</dependency>  

2、配置数据源

在maven的工程中,在目录src/main/resources添加一个名为hbase-phoenix.xml的文件。如下目录:

src
     --main
           --resources
                 --hbase-phoenix.xm

示例内容如下:

<?xml version="1.0" encoding="UTF-8"?>

<!-- id :编号, 不能重复 -->
<!-- driver:表示驱动 -->
<!-- url:表示连接的地址 -->
<!-- schema:表示连接的地址 -->
<config>
	<datasources>
		<datasource>
			<id>uba</id>
			<driver>${phoenix.driver}</driver>
			<url>${phoenix.url}</url>
			<schema>uba</schema>
		</datasource>


		<!--<datasource> -->
		<!--<id>tt</id> -->
		<!--<driver>org.apache.phoenix.jdbc.PhoenixDriver</driver> -->
		<!--<url>jdbc:phoenix:sach01-002,sach01-003,sach01-004</url> -->
		<!--<schema>test</schema> -->
		<!--</datasource> -->

	</datasources>
</config>

注意:Phoenix-Plugin支持多数据源的配置。由于url无法指定使用哪个库,这里用schema代表库名。每一个id对应一个schema(id名可以随便定义,但不要定义两个不同的schema对应到同一个id,这样会以最后一个为基准)

四、增删查改操作

1、增和改操作

(1)接口

/**
     * 插入或更新单条记录
     * 注意:如果有字段为null,数据库对应字段会设置为null
     * @author linbingwen
     * @since  2016年9月8日 
     * @param data
     * @throws Exception
     */
    public <T> void upsert(T data) throws Exception;

    /**
     * 插入或更新多条记录
     * 注意:如果有字段为null,数据库对应字段会设置为null
     * @author linbingwen
     * @since  2016年9月8日 
     * @param datas
     * @throws Exception
     */
    public <T> void upsert(List<T> datas) throws Exception;

    /**
     * 插入或更新单条记录
     * 注意:如果有字段为null,这个字段会忽略不插入
     * @author linbingwen
     * @since  2016年9月8日 
     * @param data
     * @throws Exception
     */
    public <T> void upsertIgnoreNull(T data) throws Exception;

    /**
     * 插入或更新单条记录(phoenix中插入与更新使用相同命令)
     * 注意:如果有字段为null,这个字段会忽略不插入
     * @author linbingwen
     * @since  2016年9月8日 
     * @param datas
     * @throws Exception
     */
    public <T> void upsertIgnoreNull(List<T> datas) throws Exception;

(2)使用方法

在上面的操作都做了之后就可以到这里。一定要确保表已存在、字段也有!!所以实例化连接对象

	PhoenixClinet phoenixClinet = new PhoenixClinet("uba");

注意:uba代表上面xml文件中配置的id。根据不同的id连接到不同的数据源

a、使用upsert接口

由于phoenix中删除和修改都是使用upsert命令。所以增和改操作调用同一个接口。如下

		List<StudentLin> lins = new ArrayList<StudentLin>();
		Random random = new Random();
		for (int i = 1; i <= 100; i++) {
			StudentLin lin = new StudentLin();
			lin.setStuId(i);
			lin.setNewVisitCnt("lin" + i);
		        lin.setClassId(random.nextInt(100));
			//lin.setScore(random.nextInt(100)); 这个字段会设置为Null插入
			lins.add(lin);
		}
		phoenixClinet.upsert(lins);

upsert接口支持list对象和单个对象存放

b、使用upsertIgnoreNull接口
		List<StudentLin> lins = new ArrayList<StudentLin>();
		Random random = new Random();
		for (int i = 1; i <= 100; i++) {
			StudentLin lin = new StudentLin();
			lin.setStuId(i);
			lin.setNewVisitCnt("lin" + i);
		        lin.setClassId(random.nextInt(100));
			//lin.setScore(random.nextInt(100)); 这个字段会忽略插入
			lins.add(lin);
		}
		phoenixClinet.upsertIgnoreNull(lins);

upsert和upsertIgnoreNull的区别:

如果StudentLin有字段为Null,如score。那么upsertIgnoreNull会直接忽略这个字段。 而upsert会将其设置为null.

一定要确保表名要和类名对应(陀峰法和下划线对应)

如:

      java 类名           表名
       PersonLin     person_lin

一定要确保表中字段和类中字段对应(陀峰法和下划线对应)

如:

     java 字段名            表中字段名
       stuId                    stu_id
        score                   score
       newVisitCnt      new_visit_cnt

2、查找

(1)find接口

       /**
     * 根据指定sql查询
     * 注意:传入sql形如 select * from 表名 where 条件,也支持关联表查询
     * @author linbingwen
     * @since  2016年9月8日 
     * @param clazz 查询结果对应的属性名所在的类
     * @param sql select 语句
     * @return
     */
    public <T> List<T> find(Class<T> clazz, String sql) throws Exception;

    /**
     * 根据指定参数criteria构造过滤条件,获取符合条件的记录。
     * @author linbingwen
     * @param clazz
     * @param criteria
     * @param <T>
     * @return
     */
    public <T> List<T> find(Class<T> clazz, Criteria criteria) throws Exception;

(2)使用方法

	public void findBySqlTest() {
		try {
               String sql = "select * from uba.STUDENT_LIN";
		 List<StudentLin> list = phoenixClient.find(StudentLin.class, sql);
		 System.out.println(list);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

3、直接执行sql语句(如create/drop)

(1)接口

    /**
     * 执行SQL, 也适应于drop table, create table, alter table等ddl操作
     * @author linbingwen
     * @param sql
     * @throws Exception drop table, create table, alter table等ddl操作
     * @return 执行成功返回true
     */
    public boolean execute(String sql) throws Exception;

(2)使用方法

	public void executeTest() {
		  // String sql = "CREATE TABLE uba.lin_test (id varchar PRIMARY KEY,account varchar ,passwd varchar)";
		   String sql = "drop table uba.lin_test";
		   try {
			phoenixClient.execute(sql);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}


个人技术公众号:


©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页