package com.example.demo.support;
import java.beans.PropertyDescriptor;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale;
import java.util.Map;
import java.util.Set;
import org.apache.commons.collections.CollectionUtils;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.BeanWrapper;
import org.springframework.beans.PropertyAccessorFactory;
import org.springframework.util.StringUtils;
public class HBaseResultBuilder<T> {
private Class<T> mappedClass;
private Map<String, PropertyDescriptor> mappedFields;
private Set<String> mappedProperties;
HashSet populatedProperties;
private BeanWrapper beanWrapper;
private Result result;
private String columnFamilyName;
private T t;
// 接受一些列参数并实例化要返回的结果对象
public HBaseResultBuilder(String columnFamilyName, Result result, Class<T> clazz) {
this.columnFamilyName = columnFamilyName;
this.result = result;
this.mappedClass = clazz;
mappedFields = new HashMap<>();
mappedProperties = new HashSet<>();
populatedProperties = new HashSet<>();
this.t = BeanUtils.instantiate(clazz);
PropertyDescriptor[] pds = BeanUtils.getPropertyDescriptors(mappedClass);
PropertyDescriptor[] var3 = pds;
int var4 = pds.length;
for (int var5 = 0; var5 < var4; ++var5) {
PropertyDescriptor pd = var3[var5];
if (pd.getWriteMethod() != null) {
this.mappedFields.put(this.lowerCaseName(pd.getName()), pd);
String underscoredName = this.underscoreName(pd.getName());
if (!this.lowerCaseName(pd.getName()).equals(underscoredName)) {
this.mappedFields.put(underscoredName, pd);
}
this.mappedProperties.add(pd.getName());
}
}
beanWrapper = PropertyAccessorFactory.forBeanPropertyAccess(t);
}
private String underscoreName(String name) {
if (!StringUtils.hasLength(name)) {
return "";
} else {
StringBuilder result = new StringBuilder();
result.append(this.lowerCaseName(name.substring(0, 1)));
for (int i = 1; i < name.length(); ++i) {
String s = name.substring(i, i + 1);
String slc = this.lowerCaseName(s);
if (!s.equals(slc)) {
result.append("_").append(slc);
} else {
result.append(s);
}
}
return result.toString();
}
}
private String lowerCaseName(String name) {
return name.toLowerCase(Locale.US);
}
// 使用时根据要解析的字段频繁调用此方法即可,仿造java8 流式操作
public HBaseResultBuilder build(String columnName) {
byte[] value = result.getValue(columnFamilyName.getBytes(), columnName.getBytes());
if (value == null || value.length == 0) {
return this;
} else {
String field = this.lowerCaseName(columnName.replaceAll(" ", ""));
PropertyDescriptor pd = this.mappedFields.get(field);
if (pd == null) {
// log.error("HBaseResultBuilder error: can not find property: " + field);
} else {
beanWrapper.setPropertyValue(pd.getName(), Bytes.toString(value));
populatedProperties.add(pd.getName());
}
}
return this;
}
// 伪造Java8的即视感,“流最后的终端操作“。
public T fetch() {
// 只要有一个属性被解析出来就返回结果对象,毕竟hbase存的是稀疏数据,不一定全量
if (CollectionUtils.isNotEmpty(populatedProperties)) {
return this.t;
} else {
return null;
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Phoenix Hbase springjdbc整合 demo
共48个文件
class:11个
java:11个
prefs:7个
需积分: 39 16 下载量 64 浏览量
2018-10-29
20:12:10
上传
评论
收藏 86KB ZIP 举报
温馨提示
Phoenix Hbase springjdbc整合 demo Phoenix最早是saleforce的一个开源项目,后来成为Apache基金的顶级项目。 Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。
资源推荐
资源详情
资源评论
收起资源包目录
hbase-demo.zip (48个子文件)
hbase-demo
.gitignore 268B
.mvn
wrapper
maven-wrapper.jar 46KB
maven-wrapper.properties 110B
src
main
resources
application.yml 174B
log4j2.xml 2KB
java
META-INF
MANIFEST.MF 39B
com
example
demo
dao
support
DaoSupport.java 1KB
UserInfoDao.java 448B
support
HBaseResultBuilder.java 3KB
PutExtension.java 603B
HBaseConfig.java 1KB
service
DemoService.java 3KB
vo
UserInfo.java 562B
HbaseDemoApplication.java 699B
HBaseProperties.java 441B
PhoenixConfig.java 998B
test
java
com
example
demo
HbaseDemoApplicationTests.java 336B
.classpath 2KB
mvnw 6KB
.settings
org.eclipse.wst.common.project.facet.core.xml 172B
org.springframework.ide.eclipse.prefs 65B
org.eclipse.m2e.core.prefs 97B
org.eclipse.jdt.apt.core.prefs 222B
org.eclipse.core.resources.prefs 155B
com.zeroc.IceBuilderPlugin.prefs 51B
org.eclipse.wst.common.component 414B
org.eclipse.jdt.core.prefs 601B
org.eclipse.wst.validation.prefs 50B
pom.xml 3KB
mvnw.cmd 5KB
target
classes
META-INF
MANIFEST.MF 321B
maven
com.example
hbase-demo
pom.properties 276B
pom.xml 3KB
com
example
demo
HBaseProperties.class 967B
dao
UserInfoDao.class 864B
support
DaoSupport.class 3KB
PhoenixConfig.class 1KB
HbaseDemoApplication.class 1KB
support
PutExtension.class 1KB
HBaseResultBuilder.class 5KB
service
DemoService.class 5KB
HBaseConfig.class 3KB
vo
UserInfo.class 1014B
application.yml 174B
log4j2.xml 2KB
generated-test-sources
test-annotations
generated-sources
annotations
test-classes
com
example
demo
HbaseDemoApplicationTests.class 637B
.project 2KB
.factorypath 27KB
共 48 条
- 1
资源评论
cf
- 粉丝: 64
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功