语法
声明public @interface 成员以无参无异常方式声明 可以用default为成员指定一个默认值 如果注解只有一个成员,则成员名必须为value(),在使用时可以忽略成员名和赋值号(=) 注解类可以没有成员,没有成员的注解为标识注解
元注解
+ @Target- Annotation所修饰的对象范围(Type,Field,Method)
+ @Retention- Annotation被保留的时间长短
+ @Inherited- 某个被标注的类型是被继承的,实用类的子类继承
+ @Documented- javadoc此类的工具文档化
使用
本例使用注解的方式生成SQL。
@Target (TYPE)
@Retention (RUNTIME)
public @interface TableEntity {
/**
* The name of the table.
* <p> Defaults to the entity name.
*/
String value() default "" ;
}
/**
* Title:Column.java
* Description: 表字段映射
*
* @author zhuyang
* @version 1.0 2017/7/20
*/
@Target (ElementType.FIELD)
@Retention (RetentionPolicy.RUNTIME)
public @interface Column {
String value() default "" ;
}
package com.annotation;
/**
* Title:Student.java
* Description:实体类
*
* @author zhuyang
* @version 1.0 2017/7/20
*/
@TableEntity ("stu" )
public class Student {
@Column ("name" )
private String name;
@Column (value = "password" )
private String password;
@Column (value = "age" )
private Integer age;
public String getName () {
return name;
}
public void setName (String name) {
this .name = name;
}
public String getPassword () {
return password;
}
public void setPassword (String password) {
this .password = password;
}
public Integer getAge () {
return age;
}
public void setAge (Integer age) {
this .age = age;
}
}
package com.annotation;
import java.lang.reflect.Field;
/**
* Title:QueryGenerator.java
* Description:SQL生成器
*
* @author zhuyang
* @version 1.0 2017/7/20
*/
public class QueryGenerator {
public String generatQuery (Class<?> entityClass){
StringBuffer sql = new StringBuffer("Select " );
TableEntity tableEntity = entityClass.getAnnotation(TableEntity.class);
String tableName = tableEntity.value();
Field[] fields = entityClass.getDeclaredFields();
for (Field f : fields){
Column column= f.getAnnotation(Column.class);
String columnName = column.value();
sql.append(columnName).append("," );
}
sql.append(" FROM " +tableName);
return sql.toString();
}
}
public class Main {
public static void main (String []s){
QueryGenerator queryGenerator = new QueryGenerator();
String sql = queryGenerator.generatQuery(Student.class);
System.out .println(sql);
}
}