//BasDaoUtil.java代码,共7个方法
packagecom.sxt.mvcpro.dao.impl;importjava.lang.reflect.Field;importjava.sql.Connection;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.util.ArrayList;importjava.util.Iterator;importjava.util.List;public classBaseDAOUtil {private staticPreparedStatement pst;private staticResultSet rst;/***
*@paramconn
*@paramsql
*@paramclz
*@paramvo
*@return*@throwsException*/
public int save(Connection conn, String sql, Class clz, T vo) throwsException {//取得预编译对象
pst =conn.prepareStatement(sql);//为sql设置占位符内容(insert into 表(字段1,字段2,字段3,字段4)VALUES(?,?,?,?))
String[] coulums = sql.split("\\(")[1].split("\\)")[0].split(",");for (int i = 0; i < coulums.length; i++) {
Field f=vo.getClass().getDeclaredField(coulums[i]);//取消私有封装访问限制
f.setAccessible(true);//取得字段对应的属性的值
Object fvalue =f.get(vo);
pst.setObject(i+ 1, fvalue);
}returnpst.executeUpdate();
}/***
*@paramconn
*@paramsql
*@paramvo
*@return*@throwsException*/
public int edit(Connection conn,String sql,T vo) throwsException{//update emp SET sal=?,job=?,comm=? WHERE empno=? AND ... ;//取得预编译对象
pst=conn.prepareStatement(sql);
String[] strs= sql.split("SET")[1].split("WHERE")[0].split(",");int i=0;for(i=0;i
String column=strs[i].split("=")[0];//通过反射取得column对应在vo中的属性对象(就是拿vo的变量,比如ename)
Field f =vo.getClass().getDeclaredField(column.trim());//取消私有封装访问限制
f.setAccessible(true);//取得该字段在vo对象中的值
Object fvalue=f.get(vo);//为占位符设置具体的内容
pst.setObject(i+1, fvalue);
}
String coditions= sql.split("WHERE")[1].split("=")[0];
Field f=vo.getClass().getDeclaredField(coditions.trim());
f.setAccessible(true);
Object fvalue=f.get(vo);
pst.setObject(i+1, fvalue);returnpst.executeUpdate();
}/***
*@paramconn
*@paramsql
*@paramid
*@return*@throwsException*/
public int removeById(Connection conn,String sql,Object id) throwsException{//取得预编译对象
pst=conn.prepareStatement(sql);
pst.setObject(1, id);returnpst.executeUpdate();
}/***
*@paramconn
*@paramsql
*@paramids
*@return*@throwsException*/
public int removeBatch(Connection conn,StringBuffer sql,List ids) throwsException{
Iterator iter=ids.iterator();while(iter.hasNext()) {
sql.append(iter.next()+",");
}
sql.delete(sql.length()-1, sql.length());
sql.append(")");
pst=conn.prepareStatement(sql.toString());returnpst.executeUpdate();
}/***
*@paramconn
*@paramsql
*@paramclz
*@paramid
*@return*@throwsException*/
public T selectOne(Connection conn,String sql,Class clz,Object id) throwsException{//取得预编译对象
pst=conn.prepareStatement(sql);
pst.setObject(1, id);//执行sql语句
rst=pst.executeQuery();
T t=null;if(rst.next()) {
t=clz.newInstance();//取得所有属性
Field[] fs =clz.getDeclaredFields();for(Field f : fs) {//为属性取消私有封装
f.setAccessible(true);//取得属性名
String fname=f.getName();//使用该属性名称从结果集中取得数据
Object fvalue=rst.getObject(fname);//将取得的值保存t对象的属性
f.set(t, fvalue);
}returnt;
}return null;
}/***
*@paramconn
*@paramsql
*@paramclz
*@paramparams
*@return*@throwsException*/
public List selectList(Connection conn,String sql,Class clz,Object...params) throwsException{
List list= new ArrayList();
pst=conn.prepareStatement(sql);for(int i=0;i
pst.setObject(i+1, params[i]);
}//执行sql语句
rst=pst.executeQuery();
T t=null;while(rst.next()) {
t=clz.newInstance();//取得所属性
Field[] fs =clz.getDeclaredFields();for(Field f : fs) {//为属性取消私有封装
f.setAccessible(true);//取得属性名
String fname =f.getName();//使用该属性名称从结果集中取得数据
Object fvalue=rst.getObject(fname);//将取得的值保存给t对象的属性
f.set(t, fvalue);
}
list.add(t);
}returnlist;
}/***
*@paramconn
*@paramsql
*@paramparams
*@return*@throwsException*/
public int selectCount(Connection conn,String sql,Object...params) throwsException{
pst=conn.prepareStatement(sql);for(int i=0;i
pst.setObject(i+1, params[i]);
}//执行sql语句
rst=pst.executeQuery();
rst.next();//让指针往下移动
return rst.getInt(1);
}
}