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

 更新时间:2022年01月15日 10:59:31   作者:蜀山小师叔  
这篇文章主要介绍了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>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 解决使用security和静态资源被拦截的问题

    解决使用security和静态资源被拦截的问题

    这篇文章主要介绍了解决使用security和静态资源被拦截的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • Eclipse中自动添加注释(两种)

    Eclipse中自动添加注释(两种)

    本文主要介绍了Eclipse中自动添加注释的两种方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • SpringIOC容器Bean的作用域及生命周期实例

    SpringIOC容器Bean的作用域及生命周期实例

    这篇文章主要为大家介绍了SpringIOC容器Bean的作用域及生命周期实例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java 六类运算符详解

    Java 六类运算符详解

    这篇文章主要介绍了Java 六类运算符,在 Java 语言中,运算符有算数运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、条件运算符,感兴趣的朋友可以阅读一下
    2023-03-03
  • 浅析RxJava处理复杂表单验证问题的方法

    浅析RxJava处理复杂表单验证问题的方法

    这篇文章主要介绍了RxJava处理复杂表单验证问题的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • springmvc用于方法鉴权的注解拦截器的解决方案代码

    springmvc用于方法鉴权的注解拦截器的解决方案代码

    这篇文章主要介绍了springmvc用于方法鉴权的注解拦截器的解决方案代码,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • IDEA自动补全返回值的三种快捷方式

    IDEA自动补全返回值的三种快捷方式

    平常在编码的过程中,可能需要调用第三方Api接口,这个过程中可能涉及到不太熟悉第三方Api接口的返回值类型,平常在编码的过程中,可能需要调用第三方Api接口,这个过程中可能涉及到不太熟悉第三方Api接口的返回值类型,需要的朋友可以参考下
    2023-10-10
  • 基于logback.xml不生效问题的解决

    基于logback.xml不生效问题的解决

    这篇文章主要介绍了基于logback.xml不生效问题的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java实现替换PDF中的字体功能

    Java实现替换PDF中的字体功能

    文档中可通过应用不同的字体来呈现不一样的视觉效果,通过字体来实现文档布局、排版等设计需要。本文将详细为大家介绍如何利用Java实现替换PDF文中的字体,需要的可以参考一下
    2022-03-03
  • IntelliJ IDEA 2022.1.1创建java项目的详细方法步骤

    IntelliJ IDEA 2022.1.1创建java项目的详细方法步骤

    最近安装了IntelliJ IDEA 2022.1.1,发现新版本的窗口还有些变化的,所以下面这篇文章主要给大家介绍了关于IntelliJ IDEA 2022.1.1创建java项目的详细方法步骤,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-07-07

最新评论