摘要:phoenix-plugin是笔者自己封装的一个类似mybtis的orm框架,专门用来操作phoenix(一个基于hbase的数据库),项目地址:https://github.com/appleappleapple/phoenix-plugin
下面来看看使用说明:
Phoenix-Plugin 是一个使用jdbc封装了操作Hbase的工具类.可以快速的进行增删改查操作
开发环境:Eclipse luna + windows7
编译环境:JDK7 + maven
com.github
phoenix-plugin
0.0.1-SNAPSHOT
在maven的工程中,在目录src/main/resources添加一个名为hbase-phoenix.xml的文件。如下目录:
src
--main
--resources
--hbase-phoenix.xm
示例内容如下:
uba
${phoenix.driver}
${phoenix.url}
uba
注意:Phoenix-Plugin支持多数据源的配置。由于url无法指定使用哪个库,这里用schema代表库名。每一个id对应一个schema(id名可以随便定义,但不要定义两个不同的schema对应到同一个id,这样会以最后一个为基准)
/**
* 插入或更新单条记录
* 注意:如果有字段为null,数据库对应字段会设置为null
* @author linbingwen
* @since 2016年9月8日
* @param data
* @throws Exception
*/
public void upsert(T data) throws Exception;
/**
* 插入或更新多条记录
* 注意:如果有字段为null,数据库对应字段会设置为null
* @author linbingwen
* @since 2016年9月8日
* @param datas
* @throws Exception
*/
public void upsert(List datas) throws Exception;
/**
* 插入或更新单条记录
* 注意:如果有字段为null,这个字段会忽略不插入
* @author linbingwen
* @since 2016年9月8日
* @param data
* @throws Exception
*/
public void upsertIgnoreNull(T data) throws Exception;
/**
* 插入或更新单条记录(phoenix中插入与更新使用相同命令)
* 注意:如果有字段为null,这个字段会忽略不插入
* @author linbingwen
* @since 2016年9月8日
* @param datas
* @throws Exception
*/
public void upsertIgnoreNull(List datas) throws Exception;
在上面的操作都做了之后就可以到这里。一定要确保表已存在、字段也有!!所以实例化连接对象
PhoenixClinet phoenixClinet = new PhoenixClinet("uba");
注意:uba代表上面xml文件中配置的id。根据不同的id连接到不同的数据源
由于phoenix中删除和修改都是使用upsert命令。所以增和改操作调用同一个接口。如下
List lins = new ArrayList();
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对象和单个对象存放
List lins = new ArrayList();
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);
如果StudentLin有字段为Null,如score。那么upsertIgnoreNull会直接忽略这个字段。 而upsert会将其设置为null.
如:
java 类名 表名
PersonLin person_lin
如:
java 字段名 表中字段名
stuId stu_id
score score
newVisitCnt new_visit_cnt
/**
* 根据指定sql查询
* 注意:传入sql形如 select * from 表名 where 条件,也支持关联表查询
* @author linbingwen
* @since 2016年9月8日
* @param clazz 查询结果对应的属性名所在的类
* @param sql select 语句
* @return
*/
public List find(Class clazz, String sql) throws Exception;
/**
* 根据指定参数criteria构造过滤条件,获取符合条件的记录。
* @author linbingwen
* @param clazz
* @param criteria
* @param
* @return
*/
public List find(Class clazz, Criteria criteria) throws Exception;
public void findBySqlTest() {
try {
String sql = "select * from uba.STUDENT_LIN";
List list = phoenixClient.find(StudentLin.class, sql);
System.out.println(list);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 执行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;
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();
}
}
个人技术公众号: