注解1:
带参数:
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) public @interface TableRef { String value(); }
注解2:
@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Rowkey { }
注解3:
@Target({ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Column { String family() default "info"; String column() default ""; }
java bean:
@Data @TableRef("ct:calllog") public class Calllog { @Rowkey private String rowkey; @Column(family = "caller") private String call1; @Column(family = "caller") private String call2; @Column(family = "caller") private String calltime; @Column(family = "caller") private String duration; @Column(family = "caller") private String flg = "1"; }
使用:
protected void putData(Object obj) throws Exception { // 反射 Class clazz = obj.getClass(); TableRef tableRef = (TableRef)clazz.getAnnotation(TableRef.class); String tableName = tableRef.value(); Field[] fs = clazz.getDeclaredFields(); String stringRowkey = ""; for (Field f : fs) { Rowkey rowkey = f.getAnnotation(Rowkey.class); if ( rowkey != null ) { f.setAccessible(true); stringRowkey = (String)f.get(obj); break; } } Connection conn = getConnection(); Table table = conn.getTable(TableName.valueOf(tableName)); Put put = new Put(Bytes.toBytes(stringRowkey)); for (Field f : fs) { Column column = f.getAnnotation(Column.class); if (column != null) { String family = column.family(); String colName = column.column(); if ( colName == null || "".equals(colName) ) { colName = f.getName(); } f.setAccessible(true); String value = (String)f.get(obj); put.addColumn(Bytes.toBytes(family), Bytes.toBytes(colName), Bytes.toBytes(value)); } } // 增加数据 table.put(put); // 关闭表 table.close(); }