欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java如何获取@TableField,@TableName注解的值

程序员文章站 2022-05-01 20:07:49
...

这篇文章主要介绍了Java如何获取@TableField,@TableName注解的值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
目录
如何获取@TableField,@TableName注解的值
操作方式
小结一下
@TableName@TableId爆红
加入pom依赖

如何获取@TableField,@TableName注解的值
总觉得写博客要形成自己的风格才行,不能像记流水账一样记录,比如文章有开头,过程,结尾,总结。虽说文章的好坏,跟排版无关,但是至少看得人看的舒服。所以说,要有自己的风格、比如,文章是为了记录什么,解决什么,学到了什么,总结之后给别人帮助。这才是挺有意思的一件事。

不多说,上菜。

有这么一个需求,程序中修改资料,或者代码里面需要修改到表的时候,不想通过多张日志表去记录说修改了什么,那么我定义一张表,存储表名,表字段,再存储修改的值这些。虽然说后期如果有需求要还原数据比较麻烦,但是统一处理了数据,也不会需要定义那么多张表。

操作方式
定义一个实体类

  1. @TableName("uc_cust_lock")
  2. public class CustLock {
  3. /**
  4. * 标识
  5. */
  6. @TableId
  7. @TableField("cust_lock_id")
  8. private String custLockId;
  9. /**
  10. * 经纪人id
  11. */
  12. @TableField("broker_user_id")
  13. private String brokerUserId;
  14. /**
  15. * 组织id(经纪人所属组织id)
  16. */
  17. @TableField("org_id")
  18. private String orgId;
  19. // get,set...省略
  20. }

获取类的信息

  1. // 引入的Jar包
  2. // import com.baomidou.mybatisplus.annotation.TableField;
  3. // import com.baomidou.mybatisplus.annotation.TableId;
  4. // import com.baomidou.mybatisplus.annotation.TableName;
  5. // import java.lang.reflect.Field;
  6. private static void getProxyPojoValue(Object object, Set<String> key1){
  7. String id = null;
  8. // 返回参数
  9. HashMap<String,Object> hashMap = new HashMap<>(16);
  10. for (String s : key1) {
  11. Field[] fields = object.getClass().getDeclaredFields();
  12. for (Field field : fields) {
  13. field.setAccessible(true);
  14. // 获取表名
  15. TableName table = object.getClass().getAnnotation(TableName.class);
  16. if (table != null) {
  17. String tableName = table.value();
  18. hashMap.putIfAbsent("tableName", tableName);
  19. }
  20. // 获取主键id
  21. if (id == null) {
  22. boolean isIdField = field.isAnnotationPresent(TableId.class);
  23. if (isIdField) {
  24. TableField tableField = field.getAnnotation(TableField.class);
  25. if (s.toLowerCase().equals(field.getName().toLowerCase())) {
  26. String tableId = tableField.value();
  27. hashMap.put(s,tableId);
  28. id = tableId;
  29. }
  30. }
  31. }
  32. // 获取字段的值
  33. boolean isTableField = field.isAnnotationPresent(TableField.class);
  34. if (isTableField) {
  35. TableField tableField = field.getAnnotation(TableField.class);
  36. if (s.toLowerCase().equals(field.getName().toLowerCase())) {
  37. String fieldValue = tableField.value();
  38. hashMap.put(s,fieldValue);
  39. }
  40. }
  41. }
  42. }
  43. System.out.println(hashMap);
  44. }

Main方法执行

  1. public static void main(String[] args) throws IllegalAccessException {
  2. Set<String> key1= new HashSet<>();
  3. // 定义修改的值(后期可做成动态)
  4. key1.add("brokerUserId");
  5. // 定义主键id
  6. key1.add("custlockid");
  7. getProxyPojoValue(new CustLock(),key1);
  8. }
  9. // 结果:
  10. // {custlockid=cust_lock_id, brokerUserId=broker_user_id, tableName=uc_cust_lock}

小结一下
通过getDeclaredFields,getAnnotation这两个主要关键类去获取对应的信息。

@TableName@TableId爆红

加入pom依赖

  1. <dependency>
  2. <groupId>com.baomidou</groupId>
  3. <artifactId>mybatis-plus-boot-starter</artifactId>
  4. <version>3.2.0</version>
  5. </dependency>

以上为个人经验,希望能给大家一个参考。