1 public classBaseDAOUtil {2 privatePreparedStatement pst;3 privateResultSet rst;4
5 public int save(Connection conn,String sql,Class clz,T vo) throwsException {6 pst =conn.prepareStatement(sql);7 //为 sql 设置占位符 (insert into 表(字段1,字段2,字段3,) VALUES(?,?,?))
8 String[] columns = sql.split("\\(")[1].split("\\)")[0].split(",");9 for (int i = 0; i < columns.length; i++) {10 Field f =vo.getClass().getDeclaredField(columns[i]);11 //打开访问权限
12 f.setAccessible(true);13 //取得字段对应的属性值
14 Object fvalue =f.get(vo);15 pst.setObject(i+1, fvalue);16 }17 returnpst.executeUpdate();18 }19 public int edit(Connection conn,String sql,T vo) throwsException {20 pst =conn.prepareStatement(sql);21 //UPDATE emp SET sal=?,job=?,comm=? WHERE empno=? AND ;
22 String[] strs = sql.split("SET")[1].split("WHERE")[0].split(",");23 int i = 0;24 for (i = 0; i < strs.length; i++) {25 //获取要修改的字段名称
26 String column = strs[i].split("=")[0];27 //通过反射获取 column 对应在 vo 中的属性对象
28 Field f =vo.getClass().getDeclaredField(column.trim());29 f.setAccessible(true);30 //取得该字段在vo 对象中的值
31 Object fvalue =f.get(vo);32 //为占位符设置具体的内容
33 pst.setObject(i+1, fvalue);34 }35 String conditions = sql.split("WHERE")[1].split("=")[0];36 Field f =vo.getClass().getDeclaredField(conditions.trim());37 f.setAccessible(true);38 //取得该字段在vo 对象中的值
39 Object fvalue =f.get(vo);40 pst.setObject(i+1, fvalue);41 returnpst.executeUpdate();42 }43
44
45 public int removeBuId(Connection conn,String sql,Object id) throwsException {46 pst =conn.prepareStatement(sql);47 pst.setObject(1, id);48 returnpst.executeUpdate();49 }50
51
52 public int removeBatch(Connection conn,StringBuffer sql,List ids) throwsException {53 Iterator iter =ids.iterator();54
55 while(iter.hasNext()) {56 sql.append(iter.next() + ",") ;57 }58 sql.delete(sql.length()-1, sql.length());59 sql.append(")");60
61 pst =conn.prepareStatement(sql.toString());62
63 returnpst.executeUpdate();64 }65
66 /*
67 * 根据编号查询数据68 */
69 public T selectOne(Connection conn,String sql,Class clz,Object id) throwsException {70 pst =conn.prepareStatement(sql);71 pst.setObject(1, id);72 //执行 sql 语句
73 rst =pst.executeQuery();74
75 T t = null;76 if(rst.next()) {77 t=clz.newInstance();78 //取得所有属性
79 Field[] fs =clz.getDeclaredFields();80 for(Field f : fs) {81 //打开访问权限
82 f.setAccessible(true);83 //取得属性名
84 String fname =f.getName();85 //使用该属性名称从结果集中取得数据
86 Object fvalue =rst.getObject(fname);87 //将取得的值保存给 t 对象的属性
88 f.set(t, fvalue);89 }90 returnt;91 }92 return null;93 }94
95
96 public List selectList(Connection conn,String sql,Class clz,Object...params) throwsException {97 List list = new ArrayList();98 pst =conn.prepareStatement(sql);99
100 for (int i = 0; i < params.length; i++) {101 pst.setObject(i+1, params[i]);102 }103 //执行 sql 语句
104 rst =pst.executeQuery();105 T t = null;106 while(rst.next()) {107 t =clz.newInstance();108 //取得所有属性
109 Field[] fs =clz.getDeclaredFields();110 for(Field f : fs) {111 //打开访问权限
112 f.setAccessible(true);113 //取得属性名
114 String fname =f.getName();115 //使用该属性名称从结果集中取得数据
116 Object fvalue =rst.getObject(fname);117 //将取得的值保存给 t 对象的属性
118 f.set(t, fvalue);119 }120 list.add(t);121 }122 returnlist;123 }124
125 public int selectCount(Connection conn,String sql,Object...params) throwsException {126 pst =conn.prepareStatement(sql);127 for (int i = 0; i < params.length; i++) {128 pst.setObject(i+1, params[i]);129 }130 //执行 sql 语句
131 rst =pst.executeQuery();132 rst.next();133 return rst.getInt(1);134 }135 }