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>

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

相关文章

  • 【IntelliJ IDEA】Maven构建自己的第一个Java后台的方法

    【IntelliJ IDEA】Maven构建自己的第一个Java后台的方法

    本篇文章主要介绍了Maven构建自己的第一个Java后台的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Java Random.nextInt()方法原理解析

    Java Random.nextInt()方法原理解析

    这篇文章主要介绍了Java Random.nextInt()方法原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-09-09
  • SpringBoot整合Jackson的过程详解

    SpringBoot整合Jackson的过程详解

    这篇文章给大家介绍了SpringBoot整合Jackson的整合过程,文中通过代码示例给给大家介绍的非常详细,并附带附工具类与使用案例,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2023-12-12
  • Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解

    Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭详解

    这篇文章主要给大家介绍了关于Spring Boot利用@Async异步调用:ThreadPoolTaskScheduler线程池的优雅关闭的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧
    2018-05-05
  • SpringBoot预加载与懒加载实现方法超详细讲解

    SpringBoot预加载与懒加载实现方法超详细讲解

    Spring一直被诟病启动时间慢,可Spring/SpringBoot是轻量级的框架。因为当Spring项目越来越大的时候,在启动时加载和初始化Bean就会变得越来越慢,很多时候我们在启动时并不需要加载全部的Bean,在调用时再加载就行,那这就需要预加载与懒加载的功能了
    2022-11-11
  • springboot vue组件开发实现接口断言功能

    springboot vue组件开发实现接口断言功能

    这篇文章主要为大家介绍了springboot+vue组件开发实现接口断言功能,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • Java Web Listener实现事件监听与处理

    Java Web Listener实现事件监听与处理

    Java Web开发中的Listener是一种事件机制,通过监听Web应用程序的事件,实现对事件的处理,从而实现更加灵活和高效的应用程序开发。Listener能够监听的事件包括应用程序启动和关闭、Session创建和销毁、请求和响应对象的创建和销毁等
    2023-04-04
  • Java利用LocalDate类实现日历设计

    Java利用LocalDate类实现日历设计

    java中做时间处理时一般会采用java.util.Date,但是相比于Date来说,还有更好的选择--java.time.LocalDate。本文就来用LocalDate类实现日历设计,感兴趣的可以动手尝试一下
    2022-07-07
  • Java并发系列之JUC中的Lock锁与synchronized同步代码块问题

    Java并发系列之JUC中的Lock锁与synchronized同步代码块问题

    这篇文章主要介绍了Java并发系列之JUC中的Lock锁与synchronized同步代码块,简单介绍了lock锁及锁的底层知识,结合案例给大家介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • java生成指定范围随机数的多种代码

    java生成指定范围随机数的多种代码

    今天在写代码的时候需要用到一个生成指定范围随机数的函数,百度了一下,发现了很多种方法,这里简单为大家整理一下,方便需要的朋友
    2017-08-08

最新评论