zoukankan      html  css  js  c++  java
  • 通过反射及注解的运用获取SQL语句

    import java.lang.reflect.*;

    public class BeanUtil {

    //这是拼接查询SQL语句的方法(getDelectSQL)
    public static String getDeleteSQL(Object obj) throws NoSuchMethodException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException{
    Class<? extends Object> classzz=obj.getClass();
    String tableName=classzz.getSimpleName();
    StringBuffer sbsql=new StringBuffer();
    sbsql.append("Select * Form "+tableName+" ");
    sbsql.append(" Where 1=1 ");
    Field[] fields =classzz.getDeclaredFields();
    for(Field f:fields){
    String methodName="get"+ f.getName().substring(0,1).toUpperCase()+ f.getName().substring(1);
    Method m=classzz.getDeclaredMethod(methodName);
    Object o=m.invoke(obj);
    if(o!=null){
    if(o instanceof String){
    sbsql.append(" And "+f.getName()+"='"+o+"'");
    }else{
    sbsql.append(" And "+f.getName()+"="+o);
    }
    }
    }

    return sbsql.toString();
    }

    //这是拼接更新SQL语句的方法(getUpdate)
    public static String getUpdate(Object obj) throws IllegalArgumentException, IllegalAccessException{
    Class<? extends Object> classzz=obj.getClass();
    String tableName=classzz.getSimpleName();
    String sql1="Update "+tableName+" Set ";
    String sql2=" ";
    String sql3=" Where ";
    Field[] fields=classzz.getDeclaredFields();
    for(Field f :fields){
    f.setAccessible(true);
    Object value=f.get(obj);
    //下面IF中的代码表示如果该字段满足PrimaryKey这个注解,则返回true,否则为false
    if(f.isAnnotationPresent(PrimaryKey.class)){

    if(value instanceof String){
    sql3 += f.getName()+"='"+value+"'";
    }else{
    sql3 += f.getName()+"="+value+"";
    }
    }else{
    if(value instanceof String){
    sql2 += f.getName()+"='"+value+"',";
    }else{
    sql2 += f.getName()+"="+value+",";
    }
    }


    }
    sql2=sql2.substring(0,sql2.length()-2);
    sql1= sql1+sql2+sql3;
    return sql1;
    }
    }

  • 相关阅读:
    有向强连通分支Tarjan算法
    让理科生沉默,让文科生落泪的题
    迷宫求解(数据结构栈应用)
    编程中无穷大常量的设定技巧
    poj 3159 差分约束+spfa
    codevs 1690 线段树
    uvalive 2756 环形排列颠倒的次数
    poj 2182 树状数组
    uva 10943 数学
    uva 10780 分解质因数
  • 原文地址:https://www.cnblogs.com/hyj-zy/p/5579512.html
Copyright © 2011-2022 走看看