一:什么是注解?
Jdk1.5新增新技术,注解。很多框架为了简化代码,都会提供一些注解。可以理解为插件,是代码级别的插件,在类的方法上写:@XXX,就是在代码上插入了一个插件。注解不会影响代码的实际逻辑,仅仅起到辅助性的作用。
二:注解的分类?
注解分类:内置注解(元注解 jdk 自带注解)、自定义注解(第三方框架注解)
三:元注解
@Target | 注解的作用域 | CONSTRUCTOR 构造方法 FIELD 字段 LOCAL_VARIABLE 局部变量 METHOD 方法 PACKAGE 包 PARAMETER 参数TYPE 类接口 |
@Retention | 注解生命周期 | SOURCE 只在源码显示,编译时会丢弃 CLASS 编译时会记录到class中,运行时忽略 RUNTIME 运行时存在,可以通过反射读取。 |
@Documented | 允许子类继承 | |
@Documented | 生成javadoc的时候包含注解 |
|
四:自定义注解案例
①实体类
package com.zz.entity;
import com.zz.interfaces.Column;
import com.zz.interfaces.Table;
@Table (value = "t_land")
public class Land {
@Column (value = "t_title")
public String title;
@Column (value = "t_type")
public Integer type;
}
②表名注解类
package com.zz.interfaces;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
*
* @Title Table
* @Description 自定义表映射注解
* @author Zheng.Zeng
* @date 2018年7月12日 下午1:45:14
*/
@Target (value = { ElementType.TYPE })
@Retention (RetentionPolicy.RUNTIME)
public @interface Table {
/**
* 对应数据库表
*
* @return
*/
String value();
}
③ 字段注解类
package com.zz.interfaces;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
/**
*
* @Title Field
* @Description 字段名称
* @author Zheng.Zeng
* @date 2018年7月12日 下午1:48:41
*/
@Retention (RetentionPolicy.RUNTIME)
public @interface Column {
String value();
int length() default 0;
}
④测试类
package com.zz;
import java.lang.reflect.Field;
import com.zz.entity.Land;
import com.zz.interfaces.Column;
import com.zz.interfaces.Table;
public class ORGTest {
public static <T> String query (T t) {
// 反射
Class <?> classForName = t.getClass ();
// 表名
Table table = classForName.getAnnotation (Table.class);
Field[] declaredFields = classForName.getDeclaredFields ();
String sql = " select ";
for (int i = 0; i < declaredFields.length; i++) {
Field field = declaredFields[i];
// 属性字段
Column sb = field.getAnnotation (Column.class);
sql += sb.value ();
if (i == declaredFields.length - 1) {
sql += " from ";
} else {
sql += ",";
}
}
return sql += " " + table.value ();
}
public static void main (String[] args) {
// 查询sql
System.out.println ("sql:" + query (new Land ()));
}
}
⑤ 结果演示