一:什麼是註解?
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 ()));
}
}
⑤ 結果演示