Java Annotation(注解)

系统内置注解:
@Override : 表示重写父类的方法
@Deprecated: 对不推荐使用的方法进行注释。
@SuppressWarnings : 告诉编译器忽略指定的警告,不用在编译完成后出现警告信息

自定义注解:

/**
 * 自定义注解,自动实现了Annotation接口
 * @Target    表示允许在哪里使用
 * @Retention 表示允许反射获取信息
 * Created by yz on 2018/03/15.
 */
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
    String value() default "";
    int id() default 0;
    String[] arr();
}

class AnnDemo{
    private String name;
    @MyAnnotation(value = "123",id=123,arr={"11","22"})
    public void add(){
    }
}

@Target 说明注解所修饰的对象范围:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型)或enum声明


自定义注解实现ORM框架

ORM框架:对象关系映射


定义两个注解:
1.自定义表映射注解

2.自定义字段属性注解

/**
 * 1.自定义表映射注解 (表的别名)
 * Created by yz on 2018/03/15.
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface SetTable {
    String value();
}
/**
 * 2.自定义字段属性 (属性注解)
 * Created by yz on 2018/03/15.
 */
@Retention(RetentionPolicy.RUNTIME)
public @interface SetProperty {
    String name();
    int length();
}
/**
 * Created by yz on 2018/03/15.
 */
@SetTable("user_table")
public class UserEntity {
    @SetProperty(name="user_name",length=10)
    private String userName;
    @SetProperty(name="user_age",length=10)
    private Integer userAge;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public Integer getUserAge() {
        return userAge;
    }

    public void setUserAge(Integer userAge) {
        this.userAge = userAge;
    }
}
 
/**
 * 使用注解将实体类转换成数据库表驼峰式结构,并生成sql语句
 * Created by yz on 2018/03/15.
 */
public class Main {
    public static void main(String[] args) throws ClassNotFoundException {
        // 项目中使用注解,肯定会使用到反射。反射应用场景 jdbc spring ioc ,一些注解实现
        Class<?> forName = Class.forName("cn.annotation.UserEntity");
        // getAnnotations() 表示该类上用到了哪些注解
        Annotation[] annotations = forName.getAnnotations();
//        for (Annotation annotation : annotations) {
//            System.out.println(annotation); // @cn.annotation.SetTable(value="user_table")
//        }

        // 生成orm框架sql语句
        StringBuffer sb = new StringBuffer();
        sb.append("select ");

        // getDeclaredFields() 表示获取该类所有的属性字段,包括public、private和proteced
        Field[] declaredFields = forName.getDeclaredFields();
        for (int i = 0; i < declaredFields.length; i++) {
            // 获取注解的对象
            SetProperty setProperty = declaredFields[i].getAnnotation(SetProperty.class);
            // 获取name的属性值
            String property = setProperty.name();
            sb.append(property);
            // 说明到了最后一个
            if(i == (declaredFields.length-1)){
                sb.append(" from ");
            }else {
                sb.append(" , ");
            }
        }
        // getAnnotation 表示获取某个注解对象
        SetTable setTable = forName.getAnnotation(SetTable.class);
        // 表的名称
        String tableName = setTable.value();
        System.out.println(tableName);          // user_table
        sb.append(tableName);
        System.out.println(sb.toString());      // select user_name , user_age from user_table
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值