Hbase+JAVAWeb实现超市仓库管理系统

Hbase+JAVAWeb实现超市仓库管理系统,第1张

Hbase+JAVAWeb实现超市仓库管理系统 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) rowkeynametypeweightplaceprice0001footballsports105gzhejiang205 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 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 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 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 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 mylist = new ArrayList<>();
        for (Result result : results){
            Cell[] cells = result.rawCells();
            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;


    }

其他查询用过滤器均可实现,将数据结果转换为JSON格式,方面后端数据通过AJAX传输

Serverlet *** 作 增加功能
//前后端交互的路径
@WebServlet("/add")
public class AddServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        接收前端发送过来的数据,获取请求体数据
        BufferedReader reader = req.getReader();
//        读一行,只有一行
        String params = reader.readLine();
//        JSON字符串转java对象(JSONObject对象)
        JSONObject object = JSON.parseObject(params);
        String rowkey = object.getString("rowkey");
        String name = object.getString("name");
        String type = object.getString("type");
        String place = object.getString("place");
        String price = object.getString("price");
        String weight = object.getString("weight");
//		实现HbaseDemo实体类 *** 作Hbase数据库
        HbaseDemo hbaseDemo = new HbaseDemo();
        try {
            hbaseDemo.add(rowkey,name,type,place,price,weight);
//            响应成功标识
            resp.getWriter().write("success");
        } catch (Exception e) {
            e.printStackTrace();
        }


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //执行post请求时也调用doGet方法
        this.doGet(req,resp);
    }
}

前端HTML页面




    
    Title
    










删除功能

(删除整行)

@WebServlet("/delete_all")
public class DeleteAllServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String rowkey = req.getParameter("rowkey");
        HbaseDemo hbaseDemo = new HbaseDemo();
        hbaseDemo.delete_all(rowkey);
//      请求转发到hbase.html页面,由下一个Servlet完成响应体,当前Servlet可以设置响应头(留头不留体)
        req.getRequestDispatcher("/hbase.html").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

前端HTML页面(全表查询到的数据和删除为同一界面)

删除时前端url直接携带一个参数rowkey,后端接收到rowkey,根据rowkey进行删除




    
    Title





rowkey name type place price weight *** 作 000 000 000 000 000 000 修改 删除全部 删除一列 000 000 000 000 000 000 修改
修改功能
@WebServlet("/selectByrowkey")
public class ChangeServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收rowkey,req.getParameter()切割字符串,按照and、=切割
        String rowkey = req.getParameter("rowkey");
        //调用查询
        HbaseDemo hbaseDemo = new HbaseDemo();
        JSONObject brand = hbaseDemo.change(rowkey);
//        储存到request域中
        req.setAttribute("rowkey",brand.getString("rowkey"));
        req.setAttribute("name",brand.getString("name"));
        req.setAttribute("type",brand.getString("type"));
        req.setAttribute("place",brand.getString("place"));
        req.setAttribute("price",brand.getString("price"));
        req.setAttribute("weight",brand.getString("weight"));
//        转发到change.jsp
        req.getRequestDispatcher("/change.jsp").forward(req,resp);
//      响应成功标识
        resp.getWriter().write("success");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

前端JSP页面(需要改进的地方,没有用HTML页面实现)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%--加上这句才能获得request域中数据--%>
<%@page isELIgnored="false" %>


    
    修改信息


修改信息






查询功能

查询行键是XXX开头的数据

@WebServlet("/get_byrowkey1")
public class Get_byrowkey1Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        BufferedReader reader = req.getReader();
        String params = reader.readLine();
        JSONObject object = JSON.parseObject(params);
        String str = object.getString("rowkey1");
        HbaseDemo hbaseDemo = new HbaseDemo();
        List mylist = hbaseDemo.get_byrowkey1(str);
        String jsonString = JSON.toJSONString(mylist);
        resp.setContentType("text/json;charset=utf-8");
        resp.getWriter().write(jsonString);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doGet(req,resp);
    }
}

前端HTML页面




    
    Title








不足之处

1.修改页面回显数据展示没办法再HTML显示,所以用了JSP页面

2.分页查询时如何将页面的page和Hbase行键联系起来,因为Hbase分页,主要是传入一个起始行键和条数,而前端传输的是page参数,不能和行键联系起来,所以现在分页功能不完善

结果显示



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5701908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存