封装BaseDao一个类的详解,这个类中只需要写两个方法 一个是增删改 一个查

/创建一个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;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值