java注解应用_Java注解的简单应用

一.注解的定义

packagecom.microli.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)public @interfaceColumn {

String value();

}

@interface 注解名{}

定义时需要添加内置的注解声明

@Target:注解能使用在什么地方,值是ElementType数组

packagejava.lang.annotation;public enumElementType {

TYPE,/*类、接口(包括注释类型)或枚举声明*/FIELD,/*字段声明(包括枚举常量)*/METHOD,/*方法声明*/PARAMETER,/*参数声明*/CONSTRUCTOR,/*构造方法声明*/LOCAL_VARIABLE,/*局部变量声明*/ANNOTATION_TYPE,/*注释类型声明*/PACKAGE/*包声明*/}

@Retention:注解信息存储的位置,通常使用RetentionPolicy.RUNTIME,可以在运行时获取其信息

packagejava.lang.annotation;public enumRetentionPolicy {

SOURCE,/*Annotation信息仅存在于编译器处理期间,编译器处理完之后就没有该Annotation信息了*/CLASS,/*编译器将Annotation存储于类对应的.class文件中。默认行为*/RUNTIME/*编译器将Annotation存储于class文件中,并且可由JVM读入*/}

二.注解简单应用之拼接查询语句

在框架中一般是使用注解配合反射拼接查询语句,例如:

1.定义两个注解,一个代表insert语句中的表名Table,一个代表列名Column(此时值都是String类型)

packagecom.microli.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;//代表类注解

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)public @interfaceTable {

String value();

}

packagecom.microli.annotation;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;//代表属性注解

@Target(ElementType.FIELD)

@Retention(RetentionPolicy.RUNTIME)public @interfaceColumn {

String value();

}

2.在JavaPOJO中,添加注解

packagecom.microli.annotation;//类注解

@Table("user")public classUser {//属性注解

@Column("account")privateString account;

@Column("password")privateString password;publicString getAccount() {returnaccount;

}public voidsetAccount(String account) {this.account =account;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}

}

3.编写DAO操作类,添加各种方法传入JavaPOJO得到对应的Sql语句,此处示例为add方法拼接insert语句做数据库的增加操作

packagecom.microli.annotation;importjava.lang.reflect.Field;public classDAO {/*** 拼接插入Sql语句

*

*@paramt 形参(例:user)

*@param 形参类型(例:User)*/

public void add(T t) throwsException {//定义初始sql语句为空字符串以便后面拼接

String sql = "";//得到参数 t 的Class类对象 c

Class c =t.getClass();//得到类注解,即查询的表名

Table table = (Table) c.getAnnotation(Table.class);//如果存在表名注解则取其值value拼接上sql字符串注意括号"("的存在

if (table != null) {

sql+= "insert into " + table.value() + "(";//sql="insert into table(

}//获取参数实体类中的所有属性

Field[] fields =c.getDeclaredFields();//循环判断属性前是否有列名注解,有则取其值value拼接sql字符串注意逗号","的存在

for(Field field : fields) {

Column column= field.getAnnotation(Column.class);if (column != null) {

sql+= column.value() + ",";//sql="insert into table(column1,column2,

}

}//列名拼接完最后的逗号去除

sql = sql.substring(0, sql.length() - 1);//sql="insert into table(column1,column2//增加拼接sql赋值的字符串

sql += ") values(";//sql="insert into table(column1,column2) values(//循环取出存在注解的属性值

for(Field field : fields) {

Column column= field.getAnnotation(Column.class);if (column != null) {//由于属性是私有,设置可访问

field.setAccessible(true);//拼接属性值注意要有对应的单引号

sql += "'" + field.get(t) + "',";//sql="insert into table(column1,column2) values('value1','value2',

}

}//值拼接完后最后逗号去除

sql = sql.substring(0, sql.length() - 1);//sql="insert into table(column1,column2) values('value1','value2'//拼接最后的括号")"

sql += ")";//sql="insert into table(column1,column2) values('value1','value2')//得到完整的sql语句

System.out.println(sql);

}

}

4.测试

packagecom.microli.annotation;public classTest {public static void main(String[] args) throwsException {

DAO dao= newDAO();

User user= newUser();

user.setAccount("123");

user.setPassword("qwe");

dao.add(user);

}

}

9bee2bb181fbf6e43b419a771539b471.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值