jfinal+hbase+eclipse开发web项目详细步骤03---jfinal工程中加入hbase插件

首先,这个步骤是在01工程步骤之上进行修改。
其次,要准备好hbase开发jar包(我们没有用mevan,所以要下载我准备好的jar包,下载地址:hbase1.2.6开发jar包,如果已经在01中下载好,那么就不需要再下载)。

1、将下载好的hbase开发jar包全部复制(Ctrl+A,Ctrl+C)到工程目录下的lib文件夹(Ctrl+V)

在这里插入图片描述

在这里插入图片描述

2、在工程目录com包下新建plugin包
选中com.demo,右键新建package,点击finish
在这里插入图片描述
在这里插入图片描述

3、在plugin包中分别新建Hbase、HbasePlugin类
在这里插入图片描述

Hbase.java

package com.plugin;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.hadoop.hbase.Cell;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;

public class Hbase {
	static Connection connection;

//新建表
	public static boolean create(String tableName, String columnFamily) throws Exception {
		HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();

		if (admin.tableExists(tableName)) {
			System.out.println(tableName + " exists!");
			return false;
		} else {
			String[] columnFamilyArray = columnFamily.split(",");
			HColumnDescriptor[] hColumnDescriptor = new HColumnDescriptor[columnFamilyArray.length];
			for (int i = 0; i < hColumnDescriptor.length; i++) {
				hColumnDescriptor[i] = new HColumnDescriptor(columnFamilyArray[i]);
			}
			HTableDescriptor familyDesc = new HTableDescriptor(TableName.valueOf(tableName));
			for (HColumnDescriptor columnDescriptor : hColumnDescriptor) {
				familyDesc.addFamily(columnDescriptor);
			}
			HTableDescriptor tableDesc = new HTableDescriptor(TableName.valueOf(tableName), familyDesc);

			admin.createTable(tableDesc);
			System.out.println(tableName + " create successfully!");
			return true;
		}
	}

//插入数据
	public static boolean put(String tablename, String row, String columnFamily, String qualifier, String data)
			throws Exception {
		Table table = connection.getTable(TableName.valueOf(tablename));
		Put put = new Put(Bytes.toBytes(row));
		put.addColumn(Bytes.toBytes(columnFamily), Bytes.toBytes(qualifier), Bytes.toBytes(data));
		table.put(put);
		System.out.println("put '" + row + "', '" + columnFamily + ":" + qualifier + "', '" + data + "'");
		return true;
	}

//把result转换成map,方便返回json数据
	private static Map<String, Object> resultToMap(Result result) {
		Map<String, Object> resMap = new HashMap<String, Object>();
		List<Cell> listCell = result.listCells();
		Map<String, Object> tempMap = new HashMap<String, Object>();
		String rowname = "";
		List<String> familynamelist = new ArrayList<String>();
		for (Cell cell : listCell) {
			byte[] rowArray = cell.getRowArray();
			byte[] familyArray = cell.getFamilyArray();
			byte[] qualifierArray = cell.getQualifierArray();
			byte[] valueArray = cell.getValueArray();
			int rowoffset = cell.getRowOffset();
			int familyoffset = cell.getFamilyOffset();
			int qualifieroffset = cell.getQualifierOffset();
			int valueoffset = cell.getValueOffset();
			int rowlength = cell.getRowLength();
			int familylength = cell.getFamilyLength();
			int qualifierlength = cell.getQualifierLength();
			int valuelength = cell.getValueLength();

			byte[] temprowarray = new byte[rowlength];
			System.arraycopy(rowArray, rowoffset, temprowarray, 0, rowlength);
			String temprow = Bytes.toString(temprowarray);

			byte[] tempqulifierarray = new byte[qualifierlength];
			System.arraycopy(qualifierArray, qualifieroffset, tempqulifierarray, 0, qualifierlength);
			String tempqulifier = Bytes.toString(tempqulifierarray);

			byte[] tempfamilyarray = new byte[familylength];
			System.arraycopy(familyArray, familyoffset, tempfamilyarray, 0, familylength);
			String tempfamily = Bytes.toString(tempfamilyarray);

			byte[] tempvaluearray = new byte[valuelength];
			System.arraycopy(valueArray, valueoffset, tempvaluearray, 0, valuelength);
			String tempvalue = Bytes.toString(tempvaluearray);

			tempMap.put(tempfamily + ":" + tempqulifier, tempvalue);
			rowname = temprow;
			String familyname = tempfamily;
			if (familynamelist.indexOf(familyname) < 0) {
				familynamelist.add(familyname);
			}
		}
		resMap.put("rowname", rowname);
		for (String familyname : familynamelist) {
			HashMap<String, Object> tempFilterMap = new HashMap<String, Object>();
			for (String key : tempMap.keySet()) {
				String[] keyArray = key.split(":");
				if (keyArray[0].equals(familyname)) {
					tempFilterMap.put(keyArray[1], tempMap.get(key));
				}
			}
			resMap.put(familyname, tempFilterMap);
		}

		return resMap;
	}

//查看某行
	public static String get(String tablename, String row) throws Exception {
		Table table = connection.getTable(TableName.valueOf(tablename));
		Get get = new Get(Bytes.toBytes(row));
		Result result = table.get(get);
		System.out.println("Get: " + result);
		return resultToMap(result).toString();
	}

//查看全表
	public static String scan(String tablename) throws Exception {
		Table table = connection.getTable(TableName.valueOf(tablename));
		Scan s = new Scan();
		ResultScanner rs = table.getScanner(s);

		List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
		for (Result r : rs) {
			Map<String, Object> tempmap = resultToMap(r);
			resList.add(tempmap);
		}
		return resList.toString();
	}

//删除表
	public static boolean delete(String tableName) throws IOException {
		HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
		if (admin.tableExists(tableName)) {
			try {
				admin.disableTable(tableName);
				admin.deleteTable(tableName);
			} catch (Exception e) {
				e.printStackTrace();
				return false;
			}
		}
		return true;
	}

//删除ColumnFamily
	public static boolean deleteColumnFamily(String tableName, String columnFamilyName) throws IOException {
		HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
		if (admin.tableExists(tableName)) {
			try {
				admin.deleteColumn(tableName, columnFamilyName);
			} catch (Exception e) {
				e.printStackTrace();
				return false;
			}
		}
		return true;
	}

//删除row
	public static boolean deleteRow(String tableName, String rowName) throws IOException {
		HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
		Table table = connection.getTable(TableName.valueOf(tableName));
		if (admin.tableExists(tableName)) {
			try {
				Delete delete = new Delete(rowName.getBytes());
				table.delete(delete);
			} catch (Exception e) {
				e.printStackTrace();
				return false;
			}
		}
		return true;
	}

//删除qualifier
	public static boolean deleteQualifier(String tableName, String rowName, String columnFamilyName,
			String qualifierName) throws IOException {
		HBaseAdmin admin = (HBaseAdmin) connection.getAdmin();
		Table table = connection.getTable(TableName.valueOf(tableName));
		if (admin.tableExists(tableName)) {
			try {
				Delete delete = new Delete(rowName.getBytes());
				delete.addColumns(columnFamilyName.getBytes(), qualifierName.getBytes());
				table.delete(delete);
			} catch (Exception e) {
				e.printStackTrace();
				return false;
			}
		}
		return true;
	}
}

HbasePlugin.java

package com.plugin;

import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.ConnectionFactory;

import com.jfinal.plugin.IPlugin;

public class HbasePlugin implements IPlugin{

    private String quorum;

    public HbasePlugin(String  quorum) {
        this.quorum = quorum;
    }
    @Override
    public boolean start() {
        Configuration config = HBaseConfiguration.create();
        config.set("hbase.zookeeper.quorum", quorum);   
        config.set("hbase.zookeeper.property.clientPort", "2181");
        try {
            Hbase.connection = ConnectionFactory.createConnection(config);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return true;
    }
    @Override
    public boolean stop() {
        if (!Hbase.connection.isClosed()) {
            try {
                Hbase.connection.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return true;
    }
}

4、在DemoConfig类的configPlugin方法中添加以下代码

//添加hbase插件
		String quorum="192.168.80.128";//这里是你虚拟机的ip
		HbasePlugin hp=new HbasePlugin(quorum);
		me.add(hp);

在这里插入图片描述

5、在HelloController中添加一个方法,代码如下

在这里插入图片描述

	public void hbase() {

		String r = "数据有问题!!";
		try {
			r = Hbase.get("stu", "1");//注意,这是你hbase的表名和行
		} catch (Exception e) {
			e.printStackTrace();
		}
		renderText(r);
	}

6、修改虚拟机linux下的hosts文件
打开linux终端,输入sudo gedit /etc/hosts
并且在127.0.0.1下面添加你虚拟机ip 空格 在写你虚拟机的名称
在这里插入图片描述

7、修改你电脑windows下hosts文件
打开C:\Windows\System32\drivers\etc
在这里插入图片描述
用记事本打开hosts文件,添加一条和虚拟机一样的信息
在这里插入图片描述

8、启动虚拟机的hadoop、hbase

start-all.sh
start-hbase.sh

9、创建表
进入虚拟机输入hbase shell
输入:create ‘stu’,‘fm1’
再输入:put ‘stu’,1,‘fm1:name’,‘xiaoming’

10、启动工程

打开start.java类
run as

10、查看是否连接成功!!

在浏览器中输入:http://localhost:8082/hello/hbase
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
好的,下面我将为您提供一个简单的demo示例,使用jfinal+vue+el来实现一个用户管理系统。 1. 准备工作 首先,需要安装Java环境和Maven工具。然后,创建一个Maven项目,并添加以下依赖: ```xml <dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>4.9.06</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.78</version> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.3.0</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.26</version> </dependency> ``` 2. 创建数据库表 在MySQL创建一个名为user的表,包含以下字段: - id - username - password - nickname - email 3. 创建后端代码 创建一个UserController类,用于处理用户相关的请求。 ```java public class UserController extends Controller { public void index() { render("index.html"); } public void list() { int pageNumber = getParaToInt("page"); int pageSize = getParaToInt("limit"); Page<User> userList = User.dao.paginate(pageNumber, pageSize, "select *", "from user"); renderJson(JSON.toJSONString(userList)); } public void save() { User user = getModel(User.class, ""); if (user.save()) { renderJson(JSON.toJSONString(Result.success())); } else { renderJson(JSON.toJSONString(Result.failure("保存失败"))); } } public void update() { User user = getModel(User.class, ""); if (user.update()) { renderJson(JSON.toJSONString(Result.success())); } else { renderJson(JSON.toJSONString(Result.failure("更新失败"))); } } public void delete() { Integer id = getParaToInt("id"); if (User.dao.deleteById(id)) { renderJson(JSON.toJSONString(Result.success())); } else { renderJson(JSON.toJSONString(Result.failure("删除失败"))); } } } ``` 创建一个User类,用于操作数据库。 ```java public class User extends Model<User> { public static final User dao = new User().dao(); public Integer getId() { return getInt("id"); } public void setId(Integer id) { set("id", id); } public String getUsername() { return getStr("username"); } public void setUsername(String username) { set("username", username); } public String getPassword() { return getStr("password"); } public void setPassword(String password) { set("password", password); } public String getNickname() { return getStr("nickname"); } public void setNickname(String nickname) { set("nickname", nickname); } public String getEmail() { return getStr("email"); } public void setEmail(String email) { set("email", email); } } ``` 4. 创建前端代码 创建一个index.html文件,用于展示用户列表和添加用户。 ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>User Management System</title> <link rel="stylesheet" href="https://cdn.staticfile.org/element-ui/2.15.1/theme-chalk/index.css"> </head> <body> <div id="app"> <el-container> <el-header> <h1 style="color: white">用户管理系统</h1> </el-header> <el-main> <el-table :data="userList" border style="width: 100%"> <el-table-column label="ID" prop="id"></el-table-column> <el-table-column label="用户名" prop="username"></el-table-column> <el-table-column label="昵称" prop="nickname"></el-table-column> <el-table-column label="邮箱" prop="email"></el-table-column> <el-table-column label="操作"> <template slot-scope="scope"> <el-button type="primary" @click="editUser(scope.row)">编辑</el-button> <el-button type="danger" @click="deleteUser(scope.row)">删除</el-button> </template> </el-table-column> </el-table> <el-pagination :total="total" :page-size="pageSize" :current-page.sync="currentPage" @current-change="getPage"></el-pagination> <el-form :model="user" ref="userForm" label-width="80px" style="margin-top: 20px;"> <el-form-item label="用户名" prop="username"> <el-input v-model="user.username" placeholder="请输入用户名"></el-input> </el-form-item> <el-form-item label="密码" prop="password"> <el-input v-model="user.password" placeholder="请输入密码"></el-input> </el-form-item> <el-form-item label="昵称" prop="nickname"> <el-input v-model="user.nickname" placeholder="请输入昵称"></el-input> </el-form-item> <el-form-item label="邮箱" prop="email"> <el-input v-model="user.email" placeholder="请输入邮箱"></el-input> </el-form-item> <el-form-item> <el-button type="primary" @click="saveUser">保存</el-button> <el-button @click="resetForm">重置</el-button> </el-form-item> </el-form> </el-main> </el-container> </div> <script src="https://cdn.staticfile.org/vue/2.6.14/vue.min.js"></script> <script src="https://cdn.staticfile.org/element-ui/2.15.1/index.js"></script> <script src="https://cdn.staticfile.org/axios/0.21.1/axios.min.js"></script> <script type="text/javascript"> new Vue({ el: '#app', data: { userList: [], total: 0, pageSize: 10, currentPage: 1, user: { username: '', password: '', nickname: '', email: '' } }, created: function () { this.getPage(1); }, methods: { getPage: function (page) { let _this = this; axios.get('/user/list', { params: { page: page, limit: _this.pageSize } }).then(function (response) { _this.userList = response.data.list; _this.total = response.data.total; }).catch(function (error) { console.log(error); }); }, editUser: function (row) { this.user = row; }, deleteUser: function (row) { let _this = this; let id = row.id; axios.post('/user/delete', { id: id }).then(function (response) { _this.getPage(_this.currentPage); }).catch(function (error) { console.log(error); }); }, saveUser: function () { let _this = this; this.$refs.userForm.validate(function (valid) { if (valid) { axios.post('/user/save', _this.user).then(function (response) { _this.getPage(_this.currentPage); _this.resetForm('userForm'); }).catch(function (error) { console.log(error); }); } else { return false; } }); }, resetForm: function (formName) { this.$refs[formName].resetFields(); this.user = { username: '', password: '', nickname: '', email: '' }; } } }); </script> </body> </html> ``` 5. 配置路由 在JFinalConfig类配置路由。 ```java public class DemoConfig extends JFinalConfig { @Override public void configConstant(Constants me) { me.setDevMode(true); } @Override public void configRoute(Routes me) { me.add("/user", UserController.class); } @Override public void configPlugin(Plugins me) { DruidPlugin dp = new DruidPlugin("jdbc:mysql://localhost:3306/demo?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf-8", "root", "123456"); me.add(dp); ActiveRecordPlugin arp = new ActiveRecordPlugin(dp); me.add(arp); arp.addMapping("user", User.class); } @Override public void configInterceptor(Interceptors me) { } @Override public void configHandler(Handlers me) { } } ``` 6. 运行项目 运行项目,访问http://localhost:8080/user/index即可看到用户管理系统页面。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鼎上西瓜刀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值