java注解使用

语法

  • 声明public @interface
  • 成员以无参无异常方式声明
  • 可以用default为成员指定一个默认值
  • 如果注解只有一个成员,则成员名必须为value(),在使用时可以忽略成员名和赋值号(=)
  • 注解类可以没有成员,没有成员的注解为标识注解

元注解

+ @Target- Annotation所修饰的对象范围(Type,Field,Method)
+ @Retention- Annotation被保留的时间长短
+ @Inherited- 某个被标注的类型是被继承的,实用类的子类继承
+ @Documented- javadoc此类的工具文档化

使用

本例使用注解的方式生成SQL。
@Target(TYPE)
@Retention(RUNTIME)
public @interface TableEntity {

    /**
     * The name of the table.
     * <p> Defaults to the entity name.
     */
    String value() default "";
}
/**
 * Title:Column.java
 * Description: 表字段映射
 *
 * @author zhuyang
 * @version 1.0 2017/7/20
 */

@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Column {
    String value() default "";
}
package com.annotation;

/**
 * Title:Student.java
 * Description:实体类
 *
 * @author zhuyang
 * @version 1.0 2017/7/20
 */
@TableEntity("stu")
public class Student {
    @Column("name")
    private String name;
    @Column(value = "password")
    private String password;
    @Column(value = "age")
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
package com.annotation;

import java.lang.reflect.Field;

/**
 * Title:QueryGenerator.java
 * Description:SQL生成器
 *
 * @author zhuyang
 * @version 1.0 2017/7/20
 */
public class QueryGenerator {

        public String generatQuery(Class<?> entityClass){
            StringBuffer sql = new StringBuffer("Select ");
            //get type annotation(table)
            TableEntity tableEntity = entityClass.getAnnotation(TableEntity.class);
            //table name
            String tableName = tableEntity.value();
            Field[] fields = entityClass.getDeclaredFields();
            for(Field f : fields){//iterate field and construct sql
                Column column= f.getAnnotation(Column.class);
                String columnName = column.value();
                sql.append(columnName).append(",");
            }
            sql.append(" FROM "+tableName);
            return sql.toString();
        }
}
public class Main {
    public static void main(String []s){
        QueryGenerator queryGenerator = new QueryGenerator();
        String  sql = queryGenerator.generatQuery(Student.class);
        System.out.println(sql);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值