版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/buyaore_wo/article/details/83512272
1.安装hbase
下载解压hbase即可
2.hbase整合Phoenix
下载hbase对应版本的Phoenix,解压后拷贝bin目录下 phoenix-xxx-HBase-xx-server.jar到lbase/lib目录下,重启hbase
3.jdbc template配置
package com.example.demo;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
@Configuration
public class PhoenixConfig {
@Bean
public BasicDataSource phoenixDataSource() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("org.apache.phoenix.jdbc.PhoenixDriver");
basicDataSource.setUrl("jdbc:phoenix:10-9-38-75:2181");
basicDataSource.setUsername("");
basicDataSource.setPassword("");
basicDataSource.setInitialSize(20);
basicDataSource.setMaxActive(100);
basicDataSource.setDefaultAutoCommit(true);
return basicDataSource;
}
@Autowired
@Bean
public JdbcTemplate phoenixJdbcTemplate(BasicDataSource phoenixDataSource) {
return new JdbcTemplate(phoenixDataSource);
}
}
4.使用
DaoSupport
package com.example.demo.dao.support;
import java.util.List;
import javax.annotation.Resource;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapperResultSetExtractor;
public abstract class DaoSupport<T> {
@Resource
private JdbcTemplate jdbcTemplate;
/**
* 由子类实现得到持久对象类, 即此dao操作是哪个持久类对应的数据表
*
* @return
*/
public abstract Class<T> getEntityClass();
public abstract String table();
protected RowMapperResultSetExtractor<T> rowMapper() {
BeanPropertyRowMapper<T> beanPropertyRowMapper = new BeanPropertyRowMapper<>(getEntityClass());
RowMapperResultSetExtractor<T> extractor = new RowMapperResultSetExtractor<T>(beanPropertyRowMapper);
return extractor;
}
public List<T> findAll() {
return jdbcTemplate.query("select * from " + table(), rowMapper());
}
public T findOne(String sql) {
return jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(getEntityClass()), null);
}
public void execute(String sql) {
jdbcTemplate.execute(sql);
}
}
DemoService
package com.example.demo.service;
import java.util.Iterator;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.data.hadoop.hbase.HbaseTemplate;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapperResultSetExtractor;
import org.springframework.stereotype.Service;
import com.example.demo.dao.UserInfoDao;
import com.example.demo.support.HBaseResultBuilder;
import com.example.demo.support.PutExtension;
import com.example.demo.vo.UserInfo;
@Service
public class DemoService {
public static final String TABLE_NAME = "user_info";
@Resource
private HbaseTemplate hbaseTemplate;
@Resource
UserInfoDao userInfoDao;
public String rowKey = "chinfeng1";
public String familyName = "base";
@PostConstruct
public void test() {
userInfoDao.execute("upsert into user_info(username,password,population) values('test','123456',1070)");
BeanPropertyRowMapper<UserInfo> beanPropertyRowMapper = new BeanPropertyRowMapper<>(UserInfo.class);
RowMapperResultSetExtractor<UserInfo> extractor = new RowMapperResultSetExtractor<>(beanPropertyRowMapper);
List<UserInfo> infos = userInfoDao.findAll();
for (Iterator iterator = infos.iterator(); iterator.hasNext();) {
UserInfo userInfo = (UserInfo) iterator.next();
System.out.println(userInfo.getUsername());
}
// testPut();
// UserInfo userInfo = testFind();
// System.out.println(userInfo.getUsername() + "-----------------------" +
// userInfo.getPassword());
}
public UserInfo testFind() {
// List<String> rows = hbaseTemplate.find(TABLE_NAME, "username", "name", new
// RowMapper<String>() {
// public String mapRow(Result result, int i) throws Exception {
// return result.toString();
// }
// });
// System.out.println("------" + rows);
// hbaseTemplate.fin
return (UserInfo) hbaseTemplate.get(TABLE_NAME, rowKey, familyName,
(result, i) -> new HBaseResultBuilder<>(familyName, result, UserInfo.class).build("username")
.build("password").fetch());
}
public void testPut() {
// hbaseTemplate.put(TABLE_NAME, "1", "username", "name",
// Bytes.toBytes("chinfeng"));
hbaseTemplate.execute(TABLE_NAME, (table) -> {
PutExtension putExtension = new PutExtension(familyName, rowKey.getBytes());
putExtension.build("username", "chinfeng").build("password", "123456");
table.put(putExtension);
return true;
});
System.out.println("=======put done");
}
}
5.表结构
CREATE TABLE IF NOT EXISTS user_info (
username VARCHAR NOT NULL,
password VARCHAR NOT NULL,
population BIGINT CONSTRAINT my_pk PRIMARY KEY (username, password)
);
----------------插入数据语句
upsert into user_info(username,password,population) values('test','123456',1070);
源码:
https://download.csdn.net/download/buyaore_wo/10751652
(不想要分,但貌似不能设置csdn下载分为0分)