To see the basic concept of declare an Annotation: here
Goal:
Declare table and field annotation for SQL database, so when we can build ORM(Object Relationship Mapping)
SQLTable Annotation:
@Target(value=ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLTable {
String value(); //table name
}
SQLField Annotation:
@Target(value=ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface SQLField {
String column();
String type();
int length();
}
Table structure
A Model class using annotations as description
@SQLTable("student")
public class Student {
@SQLField(column="id",type="int",length=10)
private int id;
@SQLField(column="name",type="varchar",length=10)
private String studentName;
@SQLField(column="age",type="int",length=3)
private int age;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getStudentName() {
return studentName;
}
public void setStudentName(String studentName) {
this.studentName = studentName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
Use Annotation to build SQL:
public class Demo2 {
@Test
public void test(){
try{
Class clazz = Class.forName("model.Student");
//(1)get all annotations for the class
Annotation[] annotations = clazz.getAnnotations();
for(Annotation a: annotations){
System.out.println(a);
}
//(1) get the specified annotation for the class
SQLTable table = (SQLTable) clazz.getAnnotation(SQLTable.class);
System.out.println(table);
//(2) get annotation for the field
Field f = clazz.getDeclaredField("studentName"); //get the target field from class
SQLField myField = f.getAnnotation(SQLField.class); //get the annotation for this field
//use function declared in annotation
System.out.println(myField.column()+","+myField.type()+","+myField.length());
//based on (1) and (2), we can build up all info for the related sql table
}catch(Exception e){
}
}
}

No comments:
Post a Comment