Java高级特性——反射机制(完结)——反射与注解
按照我们的学习进度,在前边我们讲过什么是注解以及注解如何定义,如果忘了,可以先回顾一下https://www.cnblogs.com/hgqin/p/13462051.html。
在学习反射和注解前,首先要练习一个ORM。
练习ORM
1.了解什么是ORM:Object RelationShip Mapping ——> 对象关系映射。
从上图可知:
1.类和表结构对应。
2.属性和字段对应。
3.对象和记录对应。
要求:利用注解和反射完成类和表结构的映射关系。
package test; import java.lang.annotation.Annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.lang.reflect.Field; //通过反射操作注解 public class Test{ public static void main(String[] args) { Class c1 = Student.class; //利用反射获取注解 Annotation[] annotations = c1.getAnnotations(); for(Annotation annotation : annotations) { System.out.println(annotation); } //获取注解的value的值 TableHgqin tableHgqin = (TableHgqin) c1.getAnnotation(TableHgqin.class); String value = tableHgqin.value(); System.out.println(value); //获得类指定的注解 Field[] fields = c1.getDeclaredFields(); for(Field field : fields) { System.out.println("#字段为: "+field); annotations = field.getAnnotations(); for(Annotation annotation : annotations) { System.out.println(annotation); } //获取注解对应的值 FieldHgqin fieldHgqin = (FieldHgqin)field.getAnnotation(FieldHgqin.class); System.out.println(fieldHgqin.columnName()); System.out.println(fieldHgqin.type()); System.out.println(fieldHgqin.length()); } } } @TableHgqin("db_student") class Student{ @FieldHgqin(columnName="db_id",type="int",length=10) private int id; @FieldHgqin(columnName="db_name",type="int",length=10) private String name; @FieldHgqin(columnName="db_age",type="varchar",length=3) private int age; public Student() { super(); // TODO Auto-generated constructor stub } public Student(int id, String name, int age) { super(); this.id = id; this.name = name; this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "student [id=" + id + ", name=" + name + ", age=" + age + "]"; } } //类名的注解 @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @interface TableHgqin{ String value(); } //属性的注解 @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) @interface FieldHgqin{ String columnName(); String type(); int length(); }
运行结果为:
几篇文章的所有案例,均需要一个一个练习,多看几次就懂了。
完结!!!