import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.reflect.Field;
@Target(ElementType.FIELD)??
@Retention(RetentionPolicy.RUNTIME)?
@interface FiledRef
{
??? String fieldName();
}
@Target(ElementType.TYPE)??
@Retention(RetentionPolicy.RUNTIME)
@interface TableRef
{
??? String tableName();
}
@TableRef(tableName = "MobDevice")
public class ReflectTest
{
??? @FiledRef(fieldName = "ID")
??? private Long id;
??? @FiledRef(fieldName = "DEVICE_NAME")
??? private String name;
??? @FiledRef(fieldName = "DEVICE_CODE")
??? private String code;
??? public ReflectTest(Long id, String name, String code)
??? {
??????? this.id = id;
??????? this.name = name;
??????? this.code = code;
??? }
??? public Long getId()
??? {
??????? return id;
??? }
??? public void setId(Long id)
??? {
??????? this.id = id;
??? }
??? public String getName()
??? {
??????? return name;
??? }
??? public void setName(String name)
??? {
??????? this.name = name;
??? }
??? public String getCode()
??? {
??????? return code;
??? }
??? public void setCode(String code)
??? {
??????? this.code = code;
??? }
??? /**
???? * @description
???? * @author zhangml
???? * @date May 17, 2010 4:39:30 PM
???? * @param args
???? */
??? public static void main(String[] args)
??? {
??????? ReflectTest rt = new ReflectTest(new Long(1), "2", "3");
??????? StringBuffer sql = new StringBuffer("");
??????? buildSql(rt, sql);
??????? System.err.println(sql);
??? }
??? public static void buildSql(Object obj, StringBuffer sb)
??? {
??????? Class<? extends Object> clazz = obj.getClass();
??????? Field[] fields = clazz.getDeclaredFields();
??????? if (clazz.isAnnotationPresent(TableRef.class))
??????? {
??????????? TableRef tr = (TableRef) clazz.getAnnotation(TableRef.class);
??????????? sb.append("SELECT * FROM ");
??????????? sb.append(tr.tableName());
??????? }
??????? if (fields != null && fields.length > 0)
??????? {
??????????? sb.append(" WHERE ");
??????????? for (Field field : fields)
??????????? {
??????????????? try
??????????????? {
??????????????????? Object value = field.get(obj);
??????????????????? if (value != null && field.isAnnotationPresent(FiledRef.class))
??????????????????? {
??????????????????????? FiledRef fr = field.getAnnotation(FiledRef.class);
??????????????????????? sb.append(fr.fieldName() + "=" + value);
??????????????????????? sb.append(" AND ");
??????????????????? }
??????????????? }
??????????????? catch (Exception e)
??????????????? {
??????????????????? e.printStackTrace();
??????????????? }
??????????? }
??????????? int length = sb.length();
??????????? sb.delete(length-5, length);
??????? }
??? }
}
执行结果:SELECT * FROM MobDevice WHERE ID=1 AND DEVICE_NAME=2 AND DEVICE_CODE=3
详细解决方案
java Annotation 拼装SQL话语(转)
热度:80 发布时间:2016-05-05 12:49:00.0
相关解决方案
- java 乱码 汉字是 ? 如何转换成汉字
- java web 登录次数限制,该如何解决
- java 工商银行网银支付 B2B的 都亟需什么,需要注意什么
- Java Applet程序从JDK6升级到7时遇到的有关问题
- java web 视频相干
- 请教一个关于链接后缀的有关问题(java web 应用)
- java 系统单点登录解决方案
- 多对多双向联系关系(annotation&xml)
- 一对多(多对一)双向联系关系(annotation&xml)
- java.lang.NumberFormatException: For input string: "id"该如何处理
- java.lang.NoSuchMethodException: setId([Ljava.lang.String;)解决方法
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- java web 受阻
- java.lang.IllegalStateException: No output folder,该怎么解决
- java.lang.NoSuchMethodError: org.springframework.util.ReflectionUtils.makeAccess,该如何解决
- java 乱码有关问题 急求大神
- java EE错误如何解决阿,都是过了,没有能解决的!
- java 工程打包有关问题 多谢各位大神!多谢
- JAVA WEB导航条,该怎么处理
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password,该如何处理
- java 中Node 有关问题
- 关于 java 引述传递和值传递,你的知否
- 吐了,java Timer 终止不了。
- Java Web 学习中有关问题,请高手指教
- java web中的url地址小疑点。
- java web开发解决办法
- java.lang.NullPointerException解决方法
- 关于 java cast 有关问题,你明白不