首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

java减小代码书写——数据访问层Wrapper—更新数据源码—反射2

2012-10-05 
java减少代码书写——数据访问层Wrapper—更新数据源码—反射2---------------------------------------------

java减少代码书写——数据访问层Wrapper—更新数据源码—反射2

----------------------------------------------------使用效果:-------------------------------------

java减小代码书写——数据访问层Wrapper—更新数据源码—反射2java减小代码书写——数据访问层Wrapper—更新数据源码—反射2

get、set直接不需写,省下很多时间啊

 

 

----------------------------------------------------源码:-------------------------------------

 

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 WrapperUpdateDao<T> {
 /**
  * 添加数据
  * 实体类第一个必须是id,注意使用时更改序列名
  * 如果不是需要修改
  * @param 实体类的完整路径
  * @param 对象
  * @return
  */
 public boolean updateBatch(String classpath,T t,int id){
  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="update "+classname+" set ";
         //sql语句的值
         ArrayList<Object> list = new ArrayList<Object>();
         String idName="";
         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){
              //得到第一列,即id
           idName=fieldName;
          }else{
           if(i==1){
            sql=sql+fieldName+"=?";
           }else{
            sql=sql+","+fieldName+"=?";
           }
          }
            
           }
           sql=sql+" where "+idName+"=?";
           ////打印sql语句
           //System.out.println(sql);
           //将sql语句进行赋值并执行
           int count =excute(classpath,t,sql,id);
           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;
 }
 
 public int excute(String classpath,T t, String sql,int id){
  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);
               }
       }
           }
         ps.setInt(fields.length, id);
           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;
 }
}

热点排行