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

2022-07-18,,,,

目录
  • 如何获取@tablefield,@tablename注解的值
    • 操作方式
    • 小结一下
  • @tablename和@tableid爆红
    • 加入pom依赖

如何获取@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>

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

《Java如何获取@TableField,@TableName注解的值.doc》

下载本文的Word格式文档,以方便收藏与打印。