java注解 sql_java反射获取注解并拼接sql语句

packagecom.hk.test;importjava.lang.reflect.Field;importjava.lang.reflect.Method;/***

*@authorhk_z

*@deprecated对类进行反射 获取注解和字段名 拼接成sql语句

*@version0.1*/

public classTest {public static voidmain(String[] args) {

Filter f1= newFilter();

f1.setId(10);

Filter f2= newFilter();

f2.setUserName("lucy"); //模糊查询

Filter f3= newFilter();

f3.setEmail("zhangsan@qq.com,lisi@sina.com.cn"); //任意其一

String sql1=query(f1);

System.out.println(sql1);

String sql2=query(f2);

System.out.println(sql2);

String sql3=query(f3);

System.out.println(sql3);

}private staticString query(Filter f1) {//TODO Auto-generated method stub

StringBuilder sb =newStringBuilder();//1.获取到class

Class c =f1.getClass();//2.获取到table 的名字

boolean exists = c.isAnnotationPresent(Table.class); //class 中有没有table的注解

if(!exists){return null;

}

Table t= (Table)c.getAnnotation(Table.class);

String tableName= t.value(); //表名

sb.append("select * from ").append(tableName).append(" where 1 = 1");//3.遍历所有的字段

Field[] fArray =c.getDeclaredFields();for(Field field:fArray){//4.处理每个字段对应的sql//4.1 拿到字段名

boolean fExists = field.isAnnotationPresent(Column.class);if(!fExists){continue;

}

Column column= field.getAnnotation(Column.class);

String columnName= column.value(); //表里面字段的名字//4.2拿到字段的值

String filedName = field.getName(); //变量的名字

String getMethodName = "get"+filedName.substring(0,1).toUpperCase()+filedName.substring(1);

Object fieldValue= null;//拼装get方法 获取返回值 ;

try{

Method getMethod= c.getMethod(getMethodName); //反射

fieldValue = getMethod.invoke(f1); //反射调用

}catch(Exception e) {//TODO Auto-generated catch block

e.printStackTrace();

}//4.3 拼装sql

if(fieldValue == null||(fieldValue instanceof Integer &&(Integer)fieldValue==0))

{continue;

}

sb.append(" and ").append(filedName);

String [] val=null;if(fieldValue instanceof String){ //字串型并且有逗号 进行拆分

if(((String)fieldValue).contains(",")){

val= ((String) fieldValue).split(",");

sb.append(" in(");for(String v:val){

sb.append("'").append(v).append("'").append(",");

}

sb.deleteCharAt(sb.length()-1);

sb.append(")");

}else{

sb.append(" = ").append("'").append(fieldValue).append("'");

}

}else if(fieldValue instanceofInteger){

sb.append(" = ").append(fieldValue);

}

}returnsb.toString();

}

}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值