当前位置: 代码网 > it编程>编程语言>Java > Java——获取@TableField,@TableName注解的值

Java——获取@TableField,@TableName注解的值

2025年12月11日 Java 我要评论
一、前言总觉得写博客要形成自己的风格才行,不能像记流水账一样记录,比如文章有开头,过程,结尾,总结。虽说文章的好坏,

一、前言

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

不多说,上菜。

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

二、操作

2.1、定义一个实体类,

@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...省略
}

2.2、获取类的信息

// 引入的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);
    }

2.3、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这两个主要关键类去获取对应的信息。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com