java减少数据访问层代码—反射2—数据访问层Wrapper—增加数据源码

来源:互联网 发布:金诺物业软件 编辑:程序博客网 时间:2024/05/01 12:47

package com.fendou.DBUtil;

import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;

/**
 * 2012-9-18
 * @author 牟云飞
 * 添加数据
 */
public class WrapperAddDao<T> {
 /**
  * 添加数据
  * 实体类第一个必须是id,注意使用时更改序列名
  * 如果不是需要修改
  * @param 实体类的完整路径
  * @param 对象
  * @return
  */
 public boolean insertBatch(String classpath,T t,String sequence){
  boolean flag = false;
  try {
   Class classType = Class.forName(classpath);
   // 获得对象的所有属性
         Field fields[] = classType.getDeclaredFields();
         String  classname=classType.getName().toLowerCase().substring(classType.getName().toLowerCase().lastIndexOf(".")+1, classType.getName().toLowerCase().length());
         //形成sql语句
         String sql="insert into "+classname+"( ";
         //
         //序列名在此修改。。。。。。。。。。。。。。。。。。。。。。。。。
         String sql2="("+sequence+".nextval";
         //sql语句的值
         ArrayList<Object> list = new ArrayList<Object>();
         for (int i = 0; i < fields.length; i++) {
          
             Field field = fields[i];

             String fieldName = field.getName();
             String firstLetter = fieldName.substring(0, 1).toUpperCase();
             if(i==0){
           sql=sql+fieldName;
          }else{
           sql=sql+","+fieldName;
           sql2=sql2+",?";
          }
            
           }
           sql2=sql2+")";
           sql=sql+") values"+sql2;

          //动态得到了sql语句,执行
           int count =excute(classpath,t,sql);
           if(count>0){
            flag=true;
           }else{
            flag=false;
           }
           
   } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  return flag;
 }
 

//动态得到了sql语句后,执行
 public int excute(String classpath,T t, String sql){
  int count =0;
  try {
   Class classType = Class.forName(classpath);
   // 获得对象的所有属性
         Field fields[] = classType.getDeclaredFields();
         String  classname=classType.getName().toLowerCase().substring(classType.getName().toLowerCase().lastIndexOf(".")+1, classType.getName().toLowerCase().length());
         DButil<T> util = new DButil<T>();
         //打开连接
         util.open();
         //得到PreparedStatement
         PreparedStatement ps= util.getPreparedStatement(sql);
         //System.out.println(sql);
         for (int i = 1; i < fields.length; i++) {
          
             Field field = fields[i];

             String fieldName = field.getName();
             String firstLetter = fieldName.substring(0, 1).toUpperCase();
             String type=field.getType().getName();
             type = type.substring(type.lastIndexOf(".")+1,type.length());
             // 获得和属性对应的getXXX()方法的名字
             String getMethodName = "get" + firstLetter + fieldName.substring(1);


             // 获得和属性对应的getXXX()方法
             Method getMethod = classType.getMethod(getMethodName,new Class[] {});

             // 调用原对象的getXXX()方法:指定调用的对象和方法的参数值列表
             Object value = getMethod.invoke(t, new Object[] {});
            //判断成员变量的类型,并将其进行匹配
             if(type.toString().toLowerCase().equals("int")){
               if(value!=null){
                ps.setInt(i,Integer.valueOf( value.toString()));
               }else{
                ps.setInt(i,0);
               }
    }
             //如果是String
             if(type.toString().toLowerCase().equals("string")){
               if(value!=null){
                ps.setString(i,value.toString());
               }else{
                ps.setString(i,null);
               }
    }
             //如果是Date类型用com.sql.TimeStamp
             if(type.toString().toLowerCase().equals("date")){
               if(value!=null){
                Date tt = (Date)value;
                long s= tt.getTime();
                ps.setTimestamp(i, new java.sql.Timestamp(s));
               }else{
                ps.setDate(i,null);
               }
       }
             //如果是Double类型
             if(type.toString().toLowerCase().equals("double")){
               if(value!=null){
                ps.setDouble(i, Double.valueOf(value.toString()));
               }else{
                ps.setDouble(i,0.0);
               }
       }
           }
           count =ps.executeUpdate();
          //关闭所有连接
           ps.close();
           util.close();
   } catch (SecurityException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (NoSuchMethodException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalArgumentException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (IllegalAccessException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (InvocationTargetException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (ClassNotFoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
  return count;
 }
 
}

 

----------------------------------使用:----------------------------------------------

代码是不是减少了很多。。。。效率也很高

原创粉丝点击