package com.zh.dao; import com.zh.util.DBUtil; import java.lang.reflect.Field; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.util.ArrayList; import java.util.List; public class BaseDao { //全查询 public static <T> List<T> findAll(String sql, Class<T> cla, Object... obj){ //获取数据库连接 Connection conn = DBUtil.getConnection(); //定义预处理对象 PreparedStatement ps = null; //定义结果集对象 ResultSet rs = null; //定义返回集合 ArrayList<T> list=new ArrayList<>(); try { //实例化预处理对象 ps = conn.prepareStatement(sql); for (int i = 0; i < obj.length; i++) { //如果有参数传过来,那么就写入 ps.setObject(i+1,obj[i]); } //执行,返回结果集 rs = ps.executeQuery(); //如果结果集里面有数据那么就一直拿 while (rs.next()){ //实例化指定对象 T t=rsToBean(rs,cla); //将指定对象放入集合 list.add(t); } }catch (Exception e){ e.printStackTrace(); }finally { //关闭资源 DBUtil.close(conn,ps,rs); } return list; } //单个查询 public static <T> T findOne(String sql, Class<T> cla, Object... obj){ List<T> list = findAll(sql, cla, obj); if (list.size()>0){ return list.get(0); } return null; } //增删改 public static int editBase(String sql,Object... obj){ //获取数据库连接 Connection conn = DBUtil.getConnection(); //定义预处理对象 PreparedStatement ps=null; try { //实例化预处理对象 ps = conn.prepareStatement(sql); //将参数写入 for (int i = 0; i < obj.length; i++) { ps.setObject(i+1,obj[i]); } //增删改执行 return ps.executeUpdate(); }catch (Exception e){ e.printStackTrace(); }finally { //关闭资源 DBUtil.close(conn,ps); } return -1; } //将指定对象写入对应的数据 private static <T> T rsToBean(ResultSet rs, Class<T> cla) { T t=null; try { //实例化指定对象 t=cla.newInstance(); //获取源数据 ResultSetMetaData metaData = rs.getMetaData(); //获取到列数 int columnCount = metaData.getColumnCount(); //循环将每列数据放入对应的列名里 for (int i = 0; i < columnCount; i++) { //获取列名 String columnLabel = metaData.getColumnLabel(i + 1); //通过列名得到对应的数据 Object object = rs.getObject(columnLabel); //通过反射将列名与javaBean属性对应 Field declaredField = cla.getDeclaredField(columnLabel); //操作权限 declaredField.setAccessible(true); //将数据写入 declaredField.set(t,object); } }catch (Exception e){ e.printStackTrace(); } return t; } }
以上注释纯属个人理解,若有错误欢迎指正