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

⑤ 结果演示

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