反射(操作注解)
了解什么是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) 编辑 收藏 举报