购买网站空间,在哪个网站做跨境电商,商务服饰网站建设,福州最新通告今天1、如何自定义注解与hbase的api进行通信#xff0c;自动进行类映射
2、如何定义一个对象 与sql中语法进行匹配
各种场景#xff0c;都可以写一个针对特定软件的语法#xff0c;进映射
package hbase;import org.apache.commons.lang3.StringUtils;
import org.apache.had…1、如何自定义注解与hbase的api进行通信自动进行类映射
2、如何定义一个对象 与sql中语法进行匹配
各种场景都可以写一个针对特定软件的语法进映射
package hbase;import org.apache.commons.lang3.StringUtils;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Row;
import org.apache.hadoop.hbase.util.Bytes;
import org.springframework.beans.factory.InitializingBean;import java.io.File;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Stream;public abstract class AbstractHbaseServiceDO implements InitializingBean {private final MapString, Field columnFieldMapnew LinkedHashMap();private static final ConcurrentHashMapClass, ListField query_field_cachenew ConcurrentHashMap();protected abstract ClassDO getHbaseDOClass();protected Row convertToRow(DO doObj) throws IllegalAccessException {return convertToRow(doObj,null);}protected DO convertToDO(Row rowObj) throws InstantiationException, IllegalAccessException {DO doObjgetHbaseDOClass().newInstance();for(Map.EntryString,Field entry:columnFieldMap.entrySet()){byte[] row rowObj.getRow();entry.getValue().set(doObj,row);}return doObj;}protected Row convertToRow(DO doObj,Long tsLong) throws IllegalAccessException {for(Map.EntryString,Field entry:columnFieldMap.entrySet()){Object valueentry.getValue().get(doObj);if(value!null){if(tsLongnull){return new Put(Bytes.toBytes((String)value));}else {return new Put(Bytes.toBytes((String)value));}}}return null;}private ListField getIndexFields(BaseQueryParams queryParams){ListField fieldListquery_field_cache.get(queryParams.getClass());if(fieldList!null){return fieldList;}fieldListnew ArrayList();for(Field field:queryParams.getClass().getDeclaredFields()){HbaseIndex indexfield.getAnnotation(HbaseIndex.class);if(indexnull){continue;}fieldList.add(field);}query_field_cache.put(queryParams.getClass(),fieldList);return fieldList;}private Object getFieldValue(Field field,Object input){Object fieldValuenull;try {field.setAccessible(true);fieldValuefield.get(input);}catch (Exception e){}return fieldValue;}protected ListRow buildHbaseQuery(BaseQueryParams queryParams){ListRow conditionsnew ArrayList();for(Field field :getIndexFields(queryParams)){HbaseIndex indexfield.getAnnotation(HbaseIndex.class);if(indexnull|| index.relation()null){continue;}Object fieldObjctgetFieldValue(field,queryParams);if(fieldObjctnull){continue;}if(index.relation().getOp()!null){//此处就是把自定义的与hbase的请求进行映射}}return conditions;}Overridepublic void afterPropertiesSet() throws Exception {buildFieldMap(getHbaseDOClass());if(getHbaseDOClass().getSuperclass()!null){buildFieldMap(getHbaseDOClass().getSuperclass());}}private void buildFieldMap(Class c){Field[] fields c.getDeclaredFields();Stream.of(fields).forEach(field - {HbaseColumn columnfield.getAnnotation(HbaseColumn.class);if(columnnull|| StringUtils.isBlank(column.name())){return;}if(!field.isAccessible()){field.setAccessible(true);}columnFieldMap.put(column.name(),field);});}
}package hbase;public abstract class BaseQueryParams {private Integer pageSize10;private int start0;public Integer getPageSize() {return pageSize;}public void setPageSize(Integer pageSize) {this.pageSize pageSize;}public int getStart() {return start;}public void setStart(int start) {this.start start;}
}package hbase;import java.lang.annotation.*;Target(ElementType.FIELD)
Retention(RetentionPolicy.RUNTIME)
Inherited
public interface HbaseColumn {String name() default ;
}package hbase;import java.lang.annotation.*;Target(ElementType.FIELD)
Retention(RetentionPolicy.RUNTIME)
Inherited
public interface HbaseIndex {String name() default ;HbaseRelationEnum relation() default HbaseRelationEnum.EQUAL;}package hbase;import org.apache.hadoop.hbase.filter.CompareFilter;
import org.apache.hadoop.hbase.filter.RowFilter;public enum HbaseRelationEnum {LESS(, CompareFilter.CompareOp.LESS),LESS_OR_EQUAL(, CompareFilter.CompareOp.LESS_OR_EQUAL),EQUAL(, CompareFilter.CompareOp.EQUAL),NOT_EQUAL(, CompareFilter.CompareOp.NOT_EQUAL),GREATER_OR_EQUAL(, CompareFilter.CompareOp.GREATER_OR_EQUAL),GREATERL(, CompareFilter.CompareOp.GREATER),IN(in,null),NOT_IN(not in,null);;private String code;private RowFilter.CompareOp op;HbaseRelationEnum(String code, RowFilter.CompareOp op) {this.code code;this.op op;}public String getCode() {return code;}public void setCode(String code) {this.code code;}public RowFilter.CompareOp getOp() {return op;}public void setOp(RowFilter.CompareOp op) {this.op op;}
}