Hbase结合JAVAWeb的超市仓库管理系统
项目来源
Hbase期末小项目,结合之前学习的Java基础;通过API对Hbase操作,结合JAVAWeb将结果展示于页面上,通过页面按钮实现增删改查功能。
项目用到的技术
1.Hbase基础知识,增删改查,以及API操作
2.JAVAWeb基础知识,了解前后端数据如何传输,何种形式
3.一定的HTML前端基础和JavaScript基础
4.AJAX前后端数据交互
项目目录结构
hbase里面包括Hbase的工具类HbseUtil以及实体类HbaseDemo
具体实现过程
Hbase操作
Hbase表结构
行键(rowkey) | 列族1(info1) | 列族2(info2) |
---|
rowkey | name | type | weight | place | price |
---|---|---|---|---|---|
0001 | football | sports | 105g | zhejiang | 205 |
Hbase实现增加功能
后端java代码
// 添加数据
public void add(String rowkey, String name, String type, String place, String price, String weight) throws Exception {
//调用HbaseUtil工具类
boolean r1=HbaseUtil.Insert_Data(tablename,rowkey,"info1","name",name);
boolean r2=HbaseUtil.Insert_Data(tablename,rowkey,"info1","type",type);
boolean r3=HbaseUtil.Insert_Data(tablename,rowkey,"info2","place",place);
boolean r4=HbaseUtil.Insert_Data(tablename,rowkey,"info2","price",price);
boolean r5=HbaseUtil.Insert_Data(tablename,rowkey,"info2","weight",weight);
if(r1&&r2&&r3&r4&r5){
System.out.println("添加成功!");
}
else{
System.out.println("添加失败");
}
}
Hbase实现删除功能
后端Java代码
//删除整行数据
public void delete_all(String rowkey) throws IOException {
boolean r = HbaseUtil.Exec_DelData(tablename,rowkey);
}
// 删除一行数据的某列,如name列等
public void delete_column(String rowkey, String column) throws IOException {
if (column.equals("name") || column.equals("type")){
boolean r = HbaseUtil.Exec_DelData(tablename, rowkey, "info1",column);
}
if (column.equals("place") || column.equals("price") || column.equals("weight")){
boolean r2 = HbaseUtil.Exec_DelData(tablename, rowkey,"info2",column);
}
}
Hbase实现修改功能
Hbase修改可以直接调用增加函数,产生新的时间戳,相当于修改
Hbase实现查询功能
主要应用Hbase的过滤器实现各种查询
比如查询行键以XXX开头的数据
// 查询行键以**开头数据
public List<JSONObject> get_byrowkey1(String str) throws IOException {
//创建scan扫描对象
Scan scan = new Scan();
//设置过滤器
Filter filter = new RowFilter(CompareFilter.CompareOp.EQUAL, new BinaryPrefixComparator(Bytes.toBytes(str)));
//为scan对象设置过滤器
scan.setFilter(filter);
//表对象实列化
Table table=HbaseUtil.GetConnection().getTable(TableName.valueOf(tablename));
//结果集
ResultScanner results=table.getScanner(scan);
//查询到的数据不止一个,存放到列表中
List<JSONObject> mylist = new ArrayList<>();
for (Result result : results){
Cell[] cells = result.rawCells();
//将结果转换为JSON格式,方面后续javaweb操作
JSONObject object = new JSONObject();
for (Cell cell : cells){
object.put(Bytes.toString(CellUtil.cloneQualifier(cell)),Bytes.toString(CellUtil.cloneValue(cell)));
object.put("rowkey",Bytes.toString(CellUtil.cloneRow(cell)));
}
mylist.add(object);
}
return mylist;
}
多个过滤器结合查询
如查询姓名是XXX,产地为XXX的数据
// 查询name为XXX,产地为XXX数据
public List<JSONObject> select_two(String value1, String value2) throws IOException {
Scan scan = new Scan();
SingleColumnValueFilter singleColumnValueFilter1 = new SingleColumnValueFilter(Bytes.toBytes("info1"), Bytes.toBytes("name"), CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(value1)));
SingleColumnValueFilter singleColumnValueFilter2 = new SingleColumnValueFilter(Bytes.toBytes("info2"), Bytes.toBytes("place"), CompareFilter.CompareOp.EQUAL, new BinaryComparator(Bytes.toBytes(value2)));
ArrayList<Filter> filters = new ArrayList<>();
filters.add(singleColumnValueFilter1);
filters.add(singleColumnValueFilter2);
// 多个过滤器用集合存放
// And关系MUST_PASS_ALL OR关系MUST_PASS_ONE
Filter filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL,filters);
// 为scan设置过滤器
scan.setFilter(filterList);
Table table=HbaseUtil.GetConnection().getTable(TableName.valueOf(tablename));
ResultScanner results=table.getScanner(scan);
List<JSONObject> mylist = new ArrayList<>();
for (Result result : results){
Cell[] cells