注解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(); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?