增强版basedao java 反射和映射

xiaoxiao2021-02-28  103

public class BaseDao{  String DBUser;  String DBPwd;  String DBHost;//服务器地址  String DBName;  int Port;  int Port2;  int DBType;//1 mysql 2 sqlserver 3 oracle;  Connection conn;  PreparedStatement ps;  public ResultSet rs;

//  链接配置文件   public BaseDao(){   Properties pro=new Properties();   InputStream is=BaseDao.class.getClassLoader().getResourceAsStream("database.properties");   try {    pro.load(is);    DBUser=pro.getProperty("DBUser");    DBPwd=pro.getProperty("DBPwd");    DBHost=pro.getProperty("DBHost");    DBName=pro.getProperty("DBName");    Port=Integer.parseInt(pro.getProperty("Port"));    DBType=Integer.parseInt(pro.getProperty("DBType"));   } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }  }

//打开链接数据库  public void open(){    try {     if(DBType==1){      Class.forName("com.mysql.jdbc.Driver");      // jdbc:mysql://localhost:3306/数据库名      conn=DriverManager.getConnection("jdbc:mysql://"+DBHost+":"+Port+"/"+DBName, DBUser, DBPwd);     }else if(DBType==2){      Class.forName("com.microsoft.sqlserver.sqlserverDriver");      //jdbc:sqlserver://localhost:1433;databasename=myschool      conn=DriverManager.getConnection("jdbc:sqlserver://"+DBHost+":"+Port2+";databasename="+DBName, DBUser, DBPwd);     }else{           }    } catch (Exception e){     e.printStackTrace();    }  }

//关闭  public void close(){   //后出现的先关闭    try {     if(rs!=null){     rs.close();     }     ps.close();     conn.close();    } catch (Exception e){     // TODO Auto-generated catch block     e.printStackTrace();    }  }  /**   * 执行增删改   * @param sql 所执行的sql语句   * @param params sql语句中的参数   * @return 受影响的行数   */

 public int executeUpdate(String sql,Object []params){

  open();   int a=0;   try{    ps=conn.prepareStatement(sql);    if(params!=null){     for (int i = 0; i < params.length; i++) {      ps.setObject(i+1,params[i]);     }    }    a=ps.executeUpdate();   } catch (Exception e){    e.printStackTrace();   }   close();   return a;  }  public ResultSet executeQuery(String sql,Object []params){   open();   try{    ps=conn.prepareStatement(sql);    if(params!=null){     for (int i = 0; i < params.length; i++){      ps.setObject(i+1,params[i]);     }    }    rs=ps.executeQuery();   }catch (Exception e){    e.printStackTrace();   }   return rs;  }  public int Add(Object o){   int a=0;   //获取表明   Class clz=o.getClass();//获取对象得嘞   String classname=clz.getName();//获取完整的名称,包括包名   int p=classname.lastIndexOf(".");//寻找最后一个点   classname=classname.substring(p+1);//从点后面开始截取   StringBuffer sb=new StringBuffer();   sb.append("insert into "+classname +"(");   Field[] fs=clz.getDeclaredFields();//获取所有列   for (int i = 0; i < fs.length; i++) {    if(i==fs.length-1)     sb.append(fs[i].getName());//最后一个不加逗号    else     sb.append(fs[i].getName()+",");//其他加逗号       }   sb.append(") values (");   for (int i = 0; i < fs.length; i++) {    if(i==fs.length-1)     sb.append("?");//最后一个不加逗号    else     sb.append("?,");//其他加逗号       }   sb.append(")");//sql拼接完毕   Object []parm=new Object[fs.length];//参数个数根据属性个数确定       try {     for (int i = 0; i < fs.length; i++) {      fs[i].setAccessible(true);//强制访问属性     parm[i]=fs[i].get(o);//根据属性获取对象的属性值     }    } catch (IllegalArgumentException e) {     // TODO Auto-generated catch block     e.printStackTrace();    } catch (IllegalAccessException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }    a=executeUpdate(sb.toString(), parm);   System.out.println(sb);      return a;  }  public int del(Object o){   int a=0;   //获取表明   Class clz=o.getClass();//获取对象得嘞   String classname=clz.getName();//获取完整的名称,包括包名   int p=classname.lastIndexOf(".");//寻找最后一个点   classname=classname.substring(p+1);//从点后面开始截取   StringBuffer sb=new StringBuffer();   sb.append("delete from "+classname +" where ");   Field[] fs=clz.getDeclaredFields();//获取   sb.append(fs[0].getName()+" = ?");   Object[] parm=new Object[1];      fs[0].setAccessible(true);   try {    parm[0]=fs[0].get(o);   } catch (IllegalArgumentException e) {    // TODO Auto-generated catch block    e.printStackTrace();   } catch (IllegalAccessException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }   a=executeUpdate(sb.toString(), parm);   return a;    }  public int update(Object o){   int a=0;   //获取表明   Class clz=o.getClass();//获取对象得嘞   String classname=clz.getName();//获取完整的名称,包括包名   int p=classname.lastIndexOf(".");//寻找最后一个点   classname=classname.substring(p+1);//从点后面开始截取   StringBuffer sb=new StringBuffer();   sb.append("update "+classname +" set ");   Field[] fs=clz.getDeclaredFields();//获取   for (int i = 0; i < fs.length; i++) {    if(i==fs.length-1)    sb.append(fs[i].getName()+"=?");    else     sb.append(fs[i].getName()+"= ?,");   }   sb.append(" where "+fs[0].getName()+" =? ");   Object[] parm=new Object[fs.length+1];       try {     for (int i = 0; i < fs.length; i++) {      fs[i].setAccessible(true);//强制访问属性     parm[i]=fs[i].get(o);     }     parm[fs.length]=fs[0].get(o);    } catch (IllegalArgumentException e) {     // TODO Auto-generated catch block     e.printStackTrace();    } catch (IllegalAccessException e) {     // TODO Auto-generated catch block     e.printStackTrace();    }        a=executeUpdate(sb.toString(), parm);      return a;  }  public List select(Class clz,String where, Object[] parm){      List list =new ArrayList();      String classname=clz.getName();//获取完整的名称,包括包名   int p=classname.lastIndexOf(".");//寻找最后一个点   classname=classname.substring(p+1);//从点后面开始截取   StringBuffer sb=new StringBuffer();      sb.append("select * from "+classname +" where "+where);   rs=executeQuery(sb.toString(), parm);   Field[] fs=clz.getDeclaredFields();//获取      try {    while(rs.next()){     Object o=clz.newInstance();     for (Field fi : fs) {      fi.setAccessible(true);      Object v=rs.getObject(fi.getName());      fi.set(o,v);           }     list.add(o);    }    close();   } catch (Exception e) {    // TODO Auto-generated catch block    e.printStackTrace();   }   return list;     }  public Object find(Class clz,String where, Object[] parm){   Object o=null;   List list=select(clz, where, parm);   if(list.size()>0) o=list.get(0);   return o;     }   }

 

查询

Object parm[]={id};   List<Student> list=bs.select(Student.class, "id=?", parm);

 for (Student st : list) {    st.show();   }

 

映射 由类生成对象  对象.set属性(值)   对象.方法() 反射  由对象得到类  由属性调用对象   Field.set(对象,值)  由方法调用对象   Method.invoke(对象,参数) 获取类的方法  Class c1=类型.class;根据类名获取类  Class c2=对象.getClass();//根据对象获取类  Class c3=Class.forName("包名.类名"); //获取某个属性  Field f=Class.getDeclaredField("名称");//根据名称获取属性  Field[] f=Class.getDeclaredFields();//获取全部属性  field.setAccessable(true);//强制访问 获取方法  Method m=class.getDeclareMethod("名称",参数列表);  Method[] m=class.getDeclareMethods();//得到所有方法

 

 

转载请注明原文地址: https://www.6miu.com/read-33874.html

最新回复(0)