反射(操作注解)

了解什么是ORM?

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

 

 1)类和表结构对应

2)属性和字段对应

3)对象和记录对应(new出来一个对象在数据库中就是一列)

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

  1 package reflection;
  2 
  3 
  4 import javafx.scene.chart.StackedBarChart;
  5 
  6 import java.lang.annotation.*;
  7 
  8 // 练习反射操作注解
  9 public class Test12 {
 10     // 假如数据库是一样的,我们可以通过注解去操纵这个表
 11     public static void main(String[] args) throws ClassNotFoundException, NoSuchFieldException {
 12 
 13         // 获得反射的类的对象
 14         Class c1 = Class.forName("reflection.Student2");
 15 
 16         // 通过反射获得注解
 17         Annotation[] annotations = c1.getAnnotations();
 18         for (Annotation annotation:annotations) {
 19             System.out.println(annotation);
 20 
 21         }
 22 
 23         // 获取注解指定的value的值
 24         Table table = (Table)c1.getAnnotation(Table.class);
 25         String value = table.value();
 26         System.out.println(value);
 27 
 28         // 获得类指定的注解
 29          java.lang.reflect.Field f= c1.getDeclaredField("name");
 30 
 31         Field annotation = f.getAnnotation(Field.class);
 32         System.out.println(annotation.columnName()); //db_name
 33         System.out.println(annotation.type());  // varchar
 34         System.out.println(annotation.length()); // 3
 35     }
 36     
 37 }
 38 
 39 
 40 // 模拟数据库
 41 @Table("db_student")
 42 class Student2 {
 43     @Field(columnName = "db_id",type = "int",length = 10)
 44     private int id;
 45     @Field(columnName = "db_age",type = "int",length = 10)
 46     private int age;
 47     @Field(columnName = "db_name",type = "varchar",length = 3)
 48     private String name;
 49 
 50     public Student2() {
 51     }
 52 
 53     public Student2(int id, int age, String name) {
 54         this.id = id;
 55         this.age = age;
 56         this.name = name;
 57     }
 58 
 59     public int getId() {
 60         return id;
 61     }
 62 
 63     public int getAge() {
 64         return age;
 65     }
 66 
 67     public String getName() {
 68         return name;
 69     }
 70 
 71     public void setId(int id) {
 72         this.id = id;
 73     }
 74 
 75     public void setAge(int age) {
 76         this.age = age;
 77     }
 78 
 79     public void setName(String name) {
 80         this.name = name;
 81     }
 82 
 83     @Override
 84     public String toString() {
 85         return "Student2{" +
 86                 "id=" + id +
 87                 ", age=" + age +
 88                 ", name='" + name + '\'' +
 89                 '}';
 90     }
 91 }
 92 
 93 
 94 
 95 // 类名的注解
 96 @Target(ElementType.TYPE)
 97 @Retention(RetentionPolicy.RUNTIME)
 98 @interface Table {
 99     String value();  // 代表注解需要一个参数
100 }
101 
102 // 属性的注解
103 @Target(ElementType.FIELD)
104 @Retention(RetentionPolicy.RUNTIME)
105 @interface Field{
106     String columnName(); // 列名
107     String type(); // 类型
108     int length(); // 长度
109 }

 

posted on 2021-04-12 16:30  Love&Share  阅读(87)  评论(0编辑  收藏  举报

导航