Java注解和反射 11 获得注解信息

4.2 反射操作注解


  • getAnnotations(获取 全部的注解参数名,但不获取参数值
  • getAnnotation(指定注解的class) -->(获取 到指定的注解,通过 注解对象.参数名() 就可以 获得 其 参数值。

4.2.1 练习 ORM

  • 了解什么是 ORM ?

Object relationship Mapping --> 对象关系映射。

在这里插入图片描述

  • 类和表结构对应
  • 属性和字段对应
  • 对象和记录对应

要求:利用注解和反射完成 类 和 表结构的映射关系。

注解:实际上和 注释的功能是一样的,就是为了解释某些东西是什么!只不过它的解释 开发者 和 程序都能看懂。程序甚至还可以通过这些反射来 获取这些解释信息。

  • 编写数据表 和 字段的注解(对其进行解释)
//类名的注解 --> 解释成数据表
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@interface Tablemu{
    String value();
}

//属性的注解 --> 解释成字段
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@interface Fieldmu{
    String columnName();
    String type();
    int length();
}
  • 构建一个类(用注解 将其解释成 数据表结构)
@Tablemu("db_students")
class Student2{
    @Fieldmu(columnName = "db_id",type = "int",length = 10)
    private int id;
    @Fieldmu(columnName = "db_age",type = "int",length = 10)
    private int age;
    @Fieldmu(columnName = "db_name",type = "varchar",length = 1024)
    private String name;
    public Student2() {}

    public Student2(int id, int age, String name) {
        this.id = id;
        this.age = age;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
  • 通过反射 来获取到 类注解的信息
public class 反射操作注解 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
        Class c1 = Class.forName("www.muquanyu.获取泛型和注解.Student2");

        Annotation[] annotations = c1.getAnnotations();
        for(Annotation annotation:annotations)
        {
            System.out.println(annotation);
        }

        //获得注解的value 的值
        Tablemu tablemu = (Tablemu)c1.getAnnotation(Tablemu.class);
        String value = tablemu.value();

        System.out.println(value);

        Field id =  c1.getDeclaredField("id");
        id.setAccessible(true);

        Annotation[] idAnnotations = id.getAnnotations();
        for(Annotation idAnnotation:idAnnotations)
        {
            System.out.println(idAnnotation);
        }

        Fieldmu idAnnotation = id.getAnnotation(Fieldmu.class);
        System.out.println(idAnnotation.columnName());
        System.out.println(idAnnotation.type());
        System.out.println(idAnnotation.length());

    }
}

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值