Java如何獲取@TableField,@TableName註解的值
如何獲取@TableField,@TableName註解的值
總覺得寫博客要形成自己的風格才行,不能像記流水賬一樣記錄,比如文章有開頭,過程,結尾,總結。雖說文章的好壞,跟排版無關,但是至少看得人看的舒服。所以說,要有自己的風格、比如,文章是為瞭記錄什麼,解決什麼,學到瞭什麼,總結之後給別人幫助。這才是挺有意思的一件事。
不多說,上菜。
有這麼一個需求,程序中修改資料,或者代碼裡面需要修改到表的時候,不想通過多張日志表去記錄說修改瞭什麼,那麼我定義一張表,存儲表名,表字段,再存儲修改的值這些。雖然說後期如果有需求要還原數據比較麻煩,但是統一處理瞭數據,也不會需要定義那麼多張表。
操作方式
定義一個實體類
@TableName("uc_cust_lock") public class CustLock { /** * 標識 */ @TableId @TableField("cust_lock_id") private String custLockId; /** * 經紀人id */ @TableField("broker_user_id") private String brokerUserId; /** * 組織id(經紀人所屬組織id) */ @TableField("org_id") private String orgId; // get,set...省略 }
獲取類的信息
// 引入的Jar包 // import com.baomidou.mybatisplus.annotation.TableField; // import com.baomidou.mybatisplus.annotation.TableId; // import com.baomidou.mybatisplus.annotation.TableName; // import java.lang.reflect.Field; private static void getProxyPojoValue(Object object, Set<String> key1){ String id = null; // 返回參數 HashMap<String,Object> hashMap = new HashMap<>(16); for (String s : key1) { Field[] fields = object.getClass().getDeclaredFields(); for (Field field : fields) { field.setAccessible(true); // 獲取表名 TableName table = object.getClass().getAnnotation(TableName.class); if (table != null) { String tableName = table.value(); hashMap.putIfAbsent("tableName", tableName); } // 獲取主鍵id if (id == null) { boolean isIdField = field.isAnnotationPresent(TableId.class); if (isIdField) { TableField tableField = field.getAnnotation(TableField.class); if (s.toLowerCase().equals(field.getName().toLowerCase())) { String tableId = tableField.value(); hashMap.put(s,tableId); id = tableId; } } } // 獲取字段的值 boolean isTableField = field.isAnnotationPresent(TableField.class); if (isTableField) { TableField tableField = field.getAnnotation(TableField.class); if (s.toLowerCase().equals(field.getName().toLowerCase())) { String fieldValue = tableField.value(); hashMap.put(s,fieldValue); } } } } System.out.println(hashMap); }
Main方法執行
public static void main(String[] args) throws IllegalAccessException { Set<String> key1= new HashSet<>(); // 定義修改的值(後期可做成動態) key1.add("brokerUserId"); // 定義主鍵id key1.add("custlockid"); getProxyPojoValue(new CustLock(),key1); } // 結果: // {custlockid=cust_lock_id, brokerUserId=broker_user_id, tableName=uc_cust_lock}
小結一下
通過getDeclaredFields,getAnnotation這兩個主要關鍵類去獲取對應的信息。
@TableName和@TableId爆紅
加入pom依賴
<dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.2.0</version> </dependency>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- Mybatis-plus使用註解 @TableField(exist = false)
- mybatis plus更新字段為null處理方法
- Mybatis-Plus 新增獲取自增列id方式
- 解決mybatisPlus 中的field-strategy配置失效問題
- springboot+mybatis-plus+oracle實現邏輯刪除