JAVA自定義註解

一:什麼是註解?

 

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

⑤ 結果演示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章