利用反射动态生成sql语句

来源:互联网 发布:图片制作成视频软件 编辑:程序博客网 时间:2024/06/05 16:32
  1. /**
  2. 这里代码的意思是传进来一个object,检查里面有没有空值,如果有空值,则赋给默认值,最后传出一个没有空值的object,防止入库的时候发生空值错误
  3. **/
  4. package com.copote.xmove4Frame.util;
  5. import java.lang.reflect.Field;
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.lang.reflect.Method;
  8. /**
  9.  * bean的反射,检查出bean中的值是否包含空值,如果为空,则赋默认值
  10.  * @author Don Quixote
  11.  * Dec 26, 2008 12:51:30 PM
  12.  * Hello,Don Quixote!
  13.  */
  14. public class BeanReflect {
  15.     
  16.     public Object beanReflect(Object object){
  17.         
  18.         Method metd = null;
  19.         String fdname = null;
  20.        
  21.         Class cs = object.getClass();// 获取集合中的对象类型
  22.          Field[] fds = cs.getDeclaredFields();// 获取他的字段数组
  23.          for (Field field : fds) {// 遍历该数组
  24.              fdname = field.getName();// 得到字段名,
  25.              try {
  26.                     //先获取相应的method对象
  27.                     //getMethod第一个参数是方法名,第二个参数是该方法的参数类型,
  28.                     //因为存在同方法名不同参数这种情况,所以只有同时指定方法名和参数类型才能唯一确定一个方法
  29.                     // 根据字段名找到对应的get方法,null表示无参数
  30.                     metd = cs.getMethod("get" + change(fdname), null);
  31.                     //第一个参数是具体调用该方法的对象
  32.                     //第二个参数是执行该方法的具体参数
  33.                     Object value = metd.invoke(object, null);// 调用该字段的get方法
  34.                     //当value不为空的时候 
  35.                     if(value==null){
  36.                         //当得到的属性值不包含表的主键值的时候
  37.                         BeanReflect brf=new BeanReflect();
  38.                         brf.beanf(object,fdname,"0");
  39.                     }
  40.                   
  41.              } catch (IllegalArgumentException e) {
  42.                     // TODO Auto-generated catch block
  43.                     e.printStackTrace();
  44.              } catch (IllegalAccessException e) {
  45.                     // TODO Auto-generated catch block
  46.                     e.printStackTrace();
  47.              } catch (InvocationTargetException e) {
  48.                     // TODO Auto-generated catch block
  49.                     e.printStackTrace();    
  50.              } catch (SecurityException e) {
  51.                 // TODO Auto-generated catch block
  52.                 e.printStackTrace();
  53.              } catch (NoSuchMethodException e) {
  54.                 // TODO Auto-generated catch block
  55.                 e.printStackTrace();
  56.              }
  57.          }
  58.         return object;
  59.     }
  60.     //将src的第一个字母转换为大写,src为空时返回null
  61.      public  String change(String src) {
  62.             if (src != null) {
  63.                 StringBuffer sb = new StringBuffer(src);
  64.                 sb.setCharAt(0, Character.toUpperCase(sb.charAt(0)));
  65.                 return sb.toString();
  66.             } else {
  67.                 return null;
  68.             }
  69.         }
  70.      //判断一个字符串是否为空,包含字符串全部由空格组成的情况
  71.     //如果为空,返回true
  72.      public  boolean blankTest(Object ob){
  73.          boolean rv=false//返回值,为空,返回true
  74.          if(ob==null){
  75.              rv=true;
  76.          }else{
  77.              String st=ob.toString();
  78.              int sl=st.length();
  79.              if(sl==0) rv=true;
  80.              for(int i=0;i<sl-1;i++){
  81.                  if(st.substring(i, i+1)!=" "){
  82.                      rv=false;
  83.                  }
  84.              } 
  85.          }
  86.          return rv;
  87.      }
  88.      //判断tableKeyArr是否包含
  89.      public  boolean tableKeyTest(String[] tableKeyArr,String st){
  90.         for(int i=0;i<tableKeyArr.length;i++){
  91.             if(tableKeyArr[i].contains(st)) return true;
  92.         }
  93.         return false;
  94.      }
  95.      
  96.      public void beanf(Object bean,String nullValueName,Object value){
  97.          Method[] methods = bean.getClass().getDeclaredMethods();
  98.          String methodName;
  99.          String methodNameFix;
  100.          String field = nullValueName;
  101.           try {
  102.              for (int i = 0; i < methods.length; i++) {
  103.                   methodName = methods[i].getName();
  104.                   methodNameFix = methodName.substring(3, methodName.length());
  105.                   methodNameFix = methodNameFix.toLowerCase();
  106.                   if (methodName.startsWith("set")) {
  107.                       if (methodNameFix.equals(field)) {
  108.                           Object[] objs = new Object[1];
  109.                            objs[0] = value;
  110.                             methods[i].invoke(bean, objs);
  111.                         // 激活obj相应的set方法,///objs数组存放调用该方法的参数
  112.                            continue;
  113.                       }
  114.                   }
  115.              }
  116.           } catch (IllegalArgumentException e) {
  117.                 // TODO Auto-generated catch block
  118.                 e.printStackTrace();
  119.             } catch (IllegalAccessException e) {
  120.                 // TODO Auto-generated catch block
  121.                 e.printStackTrace();
  122.             } catch (InvocationTargetException e) {
  123.                 // TODO Auto-generated catch block
  124.                 e.printStackTrace();
  125.             }
  126.      }
  127. }
0 0
原创粉丝点击