直接切入正題,下面我們自定義一個註解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架構師的成長之路……