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 系统单点登录解决方案
- java 获取客户端IP解决办法
- JAVA 后台怎么获得前台页面FCKedit编辑器中的内容以及内容的样式
- java 正则化匹配有关问题
- JAVA WEB导航条,该怎么处理
- java 中Node 有关问题
- 吐了,java Timer 终止不了。
- java web开发解决办法
- 关于 java cast 有关问题,你明白不
- java ftp 下传和上载乱码有关问题
- java web项目上的一些文件
- Hibernate操作数据库 报错java.lang.Integer cannot be cast to java.lang.String如何改
- java struts 文件上载
- java web baidu map开发
- JAVA WEB导航条解决办法
- java 编写ftp上载
- java web中的一个有关问题,困扰小弟我很久了
- java web 与tomcat解决办法
- java web基于j2ee的一些有关问题
- java 内网外网的一个需求,该怎么处理
- jsp 页面 安插ArrayList 报错。为什么,已经加了import="java.util."了呀!
- java dwg 怎样用java把dwg便是aoutcad的格式文件转换成gif,jpg等格式
- 求《Java Web 程序设计与项目实践》解决办法
- java webservice解决方法
- java 与jsp,该怎么解决