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());
}
}