封装BaseDao

文章描述了一种使用JavaJDBC对数据库进行增删改查操作的封装方法。通过JdbcUtils工具类获取数据库连接,使用PreparedStatement进行预处理,设置参数并执行SQL语句。对于查询操作,利用反射和BeanUtils将数据库结果映射到对象列表。
摘要由CSDN通过智能技术生成

流程:

封装增删
1.获取数据类连接对象   从另个工具类获取
(封装的JdbcUtils类中获取)
 2.预处理搬运工对象,去处理sql对象
3.参数赋值
4.循环赋值
5.执行sql语句

封装查询
1.连接数据库获取对象
2.获取搬运工对象
3.获取参数个数
4.对?赋值

5.执行sql语句
6.创建新的集合
7.获取元数据通过元数据获取自字段个数和字段名
8.通过元数据获取对象字段的个数
9.遍历数据

10.通过Class对象获取对应的类对象
11.获取字段
12.通过字段获取值
13.获取数据库数据后将数据赋值给一个对象
得有一个类
14.每while一次循环一次存到集合里
15.关闭资源

public int update(String sql, Object[] parameters) {
        /**
         * sql  传入sql语句
         * parameters   对sql的?进行赋值
         *  受影响的行数
         */
        //1.获取数据类的连接对象  从另个工具类去获取
        Connection connection = JdbcUtil.getConnection();
        //2.预处理搬运工对象,去预处理sql对象
        PreparedStatement preparedStatement = null;
        try {
            preparedStatement = connection.prepareStatement(sql);
            //3.参数赋值
            int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
            //4.循环赋值
            if (parameters != null && parameters.length == parameterCount) {
                for (int i = 1; i <= parameterCount; i++) {
                    preparedStatement.setObject(i, parameters[i - 1]);

                }
            }
            //5.执行sql语句
            int i = preparedStatement.executeUpdate();
            return i;

        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            JdbcUtil.close(preparedStatement, connection);
        }
        return 0;

    }

    //查!!!(重点)
    //不清楚查出来的数据是什么,用泛型
    //Class<T> class 通过构造方法反射出对象赋值
    public <T> List<T> query(String sql, Object[] parameters, Class<T> cls) {
        //1.连接数据库对象获取
        Connection connection = JdbcUtil.getConnection();
        //2.获取预处理的搬运工对象
        PreparedStatement preparedStatement = null;
        ResultSet resultSet = null;
        try {
            preparedStatement = connection.prepareStatement(sql);
            //3.获取参数个数
            int parameterCount = preparedStatement.getParameterMetaData().getParameterCount();
            //4.对?赋值
            if (parameters != null && parameters.length == parameterCount) {
                for (int i = 1; i <= parameterCount; i++) {
                    preparedStatement.setObject(i, parameters[i - 1]);

                }
            }
            //5.执行sql语句
            resultSet = preparedStatement.executeQuery();
            //6.创建新的集合
            ArrayList<T> list = new ArrayList<>();
            //7.获取元数据,通过元数据获取字段的个数和字段的名字
            ResultSetMetaData metaData = resultSet.getMetaData();
            //8.通过元数据获取对象字段的个数
            int columnCount = metaData.getColumnCount();
            //9.遍历数据
            while (resultSet.next()) {//往下遍历每一行的数据
                //10.通过Class对象获取对应的类对象
                //相当于new了个work对象
                T t = cls.getConstructor(null).newInstance(null);


                for (int i = 1; i <= columnCount; i++) {//获取字段
                    //11.获取列名
                    String columnName = metaData.getColumnName(i);
                    //System.out.println(columnName);
                    //12.通过字段获取值
                    Object value = resultSet.getObject(columnName);
                    System.out.println(value);
                    //13.获取数据库数据之后将数据赋值一个对象,得有个类
                    //BeanUtils.setProperty(对象,属性,值)
                    BeanUtils.setProperty(t,columnName,value);


                }
                //14.每while一次循环一次存到集合里
                list.add(t);
            }
            return list.size() != 0 ? list : null;

        } catch (Exception e) {
            e.printStackTrace();
        }finally {
            //15.关闭资源
            JdbcUtil.close(resultSet,preparedStatement,connection);
        }
        return null;

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值