如何自定义语法与其他语句进行映射
创始人
2024-11-22 11:05:54
0

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 AbstractHbaseService implements InitializingBean {       private final Map columnFieldMap=new LinkedHashMap<>();      private static final ConcurrentHashMap> query_field_cache=new ConcurrentHashMap();      protected abstract Class getHbaseDOClass();       protected Row convertToRow(DO doObj) throws IllegalAccessException {        return convertToRow(doObj,null);     }      protected DO convertToDO(Row rowObj) throws InstantiationException, IllegalAccessException {         DO doObj=getHbaseDOClass().newInstance();         for(Map.Entry 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.Entry entry:columnFieldMap.entrySet()){             Object value=entry.getValue().get(doObj);             if(value!=null){                 if(tsLong==null){                     return new Put(Bytes.toBytes((String)value));                 }else {                     return new Put(Bytes.toBytes((String)value));                 }             }         }         return null;     }       private List getIndexFields(BaseQueryParams queryParams){         List fieldList=query_field_cache.get(queryParams.getClass());         if(fieldList!=null){             return fieldList;         }         fieldList=new ArrayList<>();         for(Field field:queryParams.getClass().getDeclaredFields()){             HbaseIndex index=field.getAnnotation(HbaseIndex.class);             if(index==null){                 continue;             }             fieldList.add(field);         }         query_field_cache.put(queryParams.getClass(),fieldList);         return fieldList;     }      private Object getFieldValue(Field field,Object input){         Object fieldValue=null;         try {             field.setAccessible(true);             fieldValue=field.get(input);         }catch (Exception e){          }         return fieldValue;     }      protected List buildHbaseQuery(BaseQueryParams queryParams){         List conditions=new ArrayList<>();         for(Field field :getIndexFields(queryParams)){             HbaseIndex index=field.getAnnotation(HbaseIndex.class);             if(index==null|| index.relation()==null){                 continue;             }             Object fieldObjct=getFieldValue(field,queryParams);             if(fieldObjct==null){                 continue;             }             if(index.relation().getOp()!=null){                 //此处就是把自定义的与hbase的请求进行映射,             }         }         return conditions;     }       @Override     public 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 column=field.getAnnotation(HbaseColumn.class);             if(column==null|| StringUtils.isBlank(column.name())){                 return;             }             if(!field.isAccessible()){                 field.setAccessible(true);             }             columnFieldMap.put(column.name(),field);         });     } } 
package hbase;  public abstract class BaseQueryParams {      private Integer pageSize=10;      private int start=0;      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;     } } 

相关内容

热门资讯

科普!微信好友金花房卡跟谁买,... 微信游戏中心:斗牛房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信斗牛房卡”...
科普!炸金花好友房卡怎么建房间... 微信游戏中心:炸金花房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信炸金花房...
科普!金花房卡链接在哪买的,微... 微信游戏中心:牛牛房卡,添加微信【8488009】,进入游戏中心或相关小程序,搜索“微信牛牛房卡”,...
科普!微信金花房卡链接怎么弄的... 微信游戏中心:拼三张房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信拼三张房...
科普!金花房卡一般卖多少钱一张... 微信游戏中心:拼三张房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信拼三张房...
科普!微信怎么开炸金花好友房间... 微信游戏中心:炸金花房卡,添加微信【8488009】,进入游戏中心或相关小程序,搜索“微信炸金花房卡...
科普!金花房卡链接如何购买,拼... 微信游戏中心:拼三张房卡,添加微信【55051770】,进入游戏中心或相关小程序,搜索“微信拼三张房...
科普!微信玩金花房间从哪买房卡... 微信游戏中心:金花房卡,添加微信【33903369】,进入游戏中心或相关小程序,搜索“微信金花房卡”...
怎么换卡槽安卓系统手机,轻松掌... 手机卡槽出了问题,是不是有点头疼?别急,今天就来手把手教你如何轻松给安卓系统手机换卡槽,让你瞬间恢复...
安卓系统哪个文件占内存,内存消... 手机内存不够用,是不是你也遇到了这样的烦恼?别急,今天就来给你揭秘安卓系统里哪个文件占内存最多,让你...
苹果ios改安卓系统版本,揭秘... 你有没有想过,如果你的苹果手机突然变成了安卓系统,那会是怎样的场景呢?想象你那熟悉的苹果界面,突然间...
苹果怎么转安卓系统信息,苹果设... 你有没有想过,把你的苹果手机换成安卓系统呢?想象那些你一直想尝试的安卓特色功能,现在都能在你的苹果手...
安卓系统导航全屏怎么设置,轻松... 你是不是也和我一样,对安卓手机的导航全屏设置感到好奇呢?想象当你驾驶着你的爱车,手中紧握方向盘,而导...
金花链接房卡找谁买/炸金花房卡... 金花是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡来享...
安卓系统照片位置设置,照片位置... 手机里的照片可是我们珍贵的回忆啊!但是,你知道吗?安卓系统里的照片位置设置可是大有学问的哦!今天,就...
微信链接牛牛群房卡怎么买/微信... 微信斗牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...
秒懂教程“可以自建房间的金花房... 美猴王牛牛是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡...
房卡必备教程“炸金花房卡在哪有... 新西部是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:44346008许多玩家在游戏中会购买房卡来享...
一分钟推荐“微信金花链接房卡平... 青龙大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:15984933许多玩家在游戏中会购买房卡来...
房卡必备教程“微信上玩炸金花冲... 悠悠大厅是一款非常受欢迎的棋牌游戏,咨询房/卡添加微信:160470940许多玩家在游戏中会购买房卡...