/创建一个BaseCao的增加的方法 public class BaseDao { //parameters 参数写错了, 创建一个update的方法 public int updata(String sql, Object[] parameters) { //1.JdbcUtil调用get.Connection的方法; 调用数据库方法 Connection connection = JdbcUtil.getConnection(); PreparedStatement preparedStatement = null; try { //2.调用预搬运工方法 connection.pS; preparedStatement = connection.prepareStatement(sql); //3.通过搬运工调用得到参数元数据,调得到元素个数 pS.gPM.gPC int parameterCount = preparedStatement.getParameterMetaData().getParameterCount(); //if 后面括号里填写参数;(参数 parameters!=null 参数单词写错 //4.if判断,预搬运工赋值 if(判断)for(循环并赋值) if (parameters != null && parameters.length == parameterCount) { for (int i = 1; i <= parameterCount; i++) { preparedStatement.setObject(i, parameters[i - 1]); } } //5.启动搬运方法 pS.eU(); int i = preparedStatement.executeUpdate(); return i; } catch (Exception e) { e.printStackTrace(); } finally { //6.关闭方法 J.close(); JdbcUtil.close(preparedStatement, connection); } return 0; } //public<T> 这是泛型,所以这个<T>,必须带,因为不知道类是什么, //Object[] Parameters 这个是Object[] 值数组,是为了赋给搬运工里面的问号的? //Class<T> cls 反射类对象 Class大写, Work work public <T> List<T> query(String sql, Object[] parameters, Class<T> cls) { //1.连接数据库 Connection connection = JdbcUtil.getConnection(); //防止局部变量不能出方法 ResultSet resultSet =null; PreparedStatement preparedStatement = null; try { //2.调用预处理搬运工 sql preparedStatement = connection.prepareStatement(sql); //3.搬运工调用有参元素据,再调用参数的个数 int parameterCount = preparedStatement.getParameterMetaData().getParameterCount(); //增加代码的健壮性 if (parameters != null && parameters.length == parameterCount) { //4.给参数赋值 for (int i = 1; i <= parameterCount; i++) { preparedStatement.setObject(i, parameters[i - 1]); } } //5.调用executeQuery 方法,并得到resultSet集合; resultSet = preparedStatement.executeQuery(); //6.创造集合 List<T> list = new ArrayList<>(); //7.获取元数据,通过原数据获得,字段表的个数和名字 ResultSetMetaData metaData = preparedStatement.getMetaData(); //8.通过元数据获得列数 int columnCount = metaData.getColumnCount(); System.out.println(columnCount); //9.遍历集合 //控制行 while (resultSet.next()) { //10.创建一个class对象,获取值 ,通过。cls.getConstructor,获取无参构造.newInstance,得到一个实例 T t = cls.getConstructor(null).newInstance(null); for (int i = 1; i <= columnCount; i++) {//控制列 //11.获取列(字段)的名字 (i) 代表哪一个 String columnName = metaData.getColumnName(i); System.out.println(columnName); // 12.通过字段的名字获取值名字 Object value = resultSet.getObject(columnName); //? 为什么必须打印才可调用 System.out.println(value); //13.通过BeanUtils.调方法 BeanUtils.setProperty(t, columnName, value); list.add(t); } } //14.赋值给集合 return list.size() != 0 ? list : null; } catch (Exception e) { e.printStackTrace(); }finally { //15.关源 JdbcUtil.close(resultSet,preparedStatement,connection); } return null; } }
封装BaseDao一个类的详解,这个类中只需要写两个方法 一个是增删改 一个查
最新推荐文章于 2024-06-19 15:09:37 发布