直接切入正题,下面我们自定义一个注解Entity,并通过Entity注解动态获取指定类的映射表进行数据查询(本案例只作为演示,所以比较简要),请看代码:
1、定义一个Java注解Entity
package com.tyyd.anno;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Target是Java的元注解,可以指定注解的生效范围(如范围是类、方法、构造方法等)
* 本注解声明作用范围为类和属性
* Retention:指定注解的生命周期,如RetentionPolicy.RUNTIME指定注解存活于运行时,
* RetentionPolicy.CLASS指定存活于class文件中
*/
@Target({ElementType.TYPE, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface Entity {
// 通过default指定一个默认值
public String value() default "";
}
2、定义一个实体类,并给它赋予@Entity注解
package com.tyyd.entity;
import com.tyyd.anno.Entity;
/**
* 注解当中如果只有一个值如@Entity("city"),那么默认"city"对应的是value的值。它等价于@Entity(value="city")。
* 如果注解当中有多个属性且对应多个值@Entity(value="city", name="wzx"),则value=以及name=不能省略
*/
@Entity("city")
public class CityEntity {
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
3、定义一个工具类,通过这个工具类中的方法,我们动态获取一条SQL查询语句
package com.tyyd.util;
import com.tyyd.anno.Entity;
public class CommUtil {
/**
* 通过一个对象,来构建一条查询的SQL语句
* @param object
*/
public static String buildQuerySqlForEntity(Object object) {
Class clazz = object.getClass();
// 判断是否加了Entity注解
if (clazz.isAnnotationPresent(Entity.class)) {
// 得到注解
Entity entity = (Entity)clazz.getAnnotation(Entity.class);
String entityName = entity.value();
String sql = "select * from " + entityName + " where id = '1' and name = 'wzx'";
return sql;
}
return "";
}
}
运行一个Test测试类,查看控制台输出结果:
import com.tyyd.entity.CityEntity;
import com.tyyd.util.CommUtil;
public class Test {
public static void main(String[] args) {
CityEntity cityEntity = new CityEntity();
cityEntity.setId("1");
cityEntity.setName("test");
String sql = CommUtil.buildQuerySqlForEntity(cityEntity);
System.out.println(sql);
}
}
以上便是一个自定义注解及其功能的案例演示。觉得文章能够给你带来帮助,可以给个赞,关注本人的博客哦。一起努力,相互学习,共同成长!一个Java架构师的成长之路……