最近需要用到HBase数据库。但是文件数据库不支持SQL脚本,用起来太麻烦了。
而且他的设计模式,还无法使用反射之类的方式实现自动填充。所以为了尽可能的提高易用性,找到一个开源框架吧。
其实知识进行了一个初步的操作封装。叫做hbase.dsl。
记录一下。
原始HBase代码
public class PutAndGet
{
public static void main(String[] args) throws IOException
{
HTable hTable = new HTable(“test”);
byte[] rowId = Bytes.toBytes(“abcd”);
byte[] famA = Bytes.toBytes(“famA”);
byte[] col1 = Bytes.toBytes(“col1”);
Put put = new Put(rowId).add(famA, col1, Bytes.toBytes(“hello world!”));
hTable.put(put);
Get get = new Get(rowId);
Result result = hTable.get(get);
byte[] value = result.getValue(famA, col1); System.out.println(Bytes.toString(value));
}
}
DSL代码
public class PutAndGetWithDsl
{
public static void main(String[] args) throws IOException
{
HBase<QueryOps, String> hBase = new HBase<QueryOps, String>(String.class);
hBase.save(“test”).row(“abcd”).family(“famA”).col(“col1”,“hello world!”);
String value = hBase.fetch(“test”).row(“abcd”).family(“famA”).value(“col1”, String.class);
System.out.println(value);
}
}
查询HBase代码
public class Scanner
{
public static void main(String[] args) throws IOException
{
byte[] famA = Bytes.toBytes(“famA”);
byte[] col1 = Bytes.toBytes(“col1”);
HTable hTable = new HTable(“test”);
Scan scan = new Scan(Bytes.toBytes(“a”), Bytes.toBytes(“z”));
scan.addColumn(famA, col1);
SingleColumnValueFilter singleColumnValueFilterA = new SingleColumnValueFilter(famA, col1, CompareOp.EQUAL, Bytes.toBytes(“hello world!”));
singleColumnValueFilterA.setFilterIfMissing(true); SingleColumnValueFilter singleColumnValueFilterB = new SingleColumnValueFilter(famA, col1, CompareOp.EQUAL, Bytes.toBytes(“hello hbase!”));
singleColumnValueFilterB.setFilterIfMissing(true);
FilterList filter = new FilterList(Operator.MUST_PASS_ONE, Arrays .asList((Filter) singleColumnValueFilterA, singleColumnValueFilterB));
scan.setFilter(filter);
ResultScanner scanner = hTable.getScanner(scan);
for (Result result : scanner)
{
System.out.println(Bytes.toString(result.getValue(famA, col1)));
}
}
}
查询DSL代码
public class ScannerWithDsl
{
public static void main(String[] args) throws IOException
{
HBase<QueryOps, String> hBase = new HBase<QueryOps, String>(String.class);
hBase.scan(“test”,“a”,“z”).select().family(“famA”).col(“col1”).where().family(“famA”).col(“col1”).eq(“hello world!”,“hello hbase!”).foreach(new ForEach<Row>()
{
@Override
public void process(Row row)
{
System.out.println(row.value(“famA”, “col1”, String.class));
}
});
}
}
DSL ByteArray代码
public class UsingBytes
{
public static void main(String[] args)
{
HBase<QueryOps, String> hBase = new HBase<QueryOps, String>(String.class);
byte[] rowId = Bytes.toBytes(“1234”);
byte[] helloworld = Bytes.toBytes(“hello world!”);
hBase.save(“test”).row(rowId).family(“famA”).col(“col1”, helloworld);
Iterable<Row<byte[]>> it = hBase.scan(“test”).where().family(“famA”).col(“col1”).eq(helloworld);
for (Row<byte[]> row : it)
{
byte[] value = row.value(“famA”, “col1”, byte[].class);
System.out.println(Bytes.toString(value));
}
}
}