使用DBUtils处理查询结果集时的javabean是实体而不是泛型中的类

什么是javabean

简单理解:JavaBean 就是一个类, 开发中通常用于封装数据

javabean具备的特征

1、所有属性为private
2、提供默认构造方法
3、提供getter和setter
4、实现serializable接口

使用DBUtils处理查询结果时的BeanHandler和BeanListHandler

BeanHandler:将结果集中第一条记录封装到一个指定的javaBean中
BeanListHandler:将结果集中每一条记录封装到指定的javaBean中,再将这些javaBean在封装到List集合中

看下面具体使用场景

//需求2: 获取订单编号为 order001的订单中的所有商品信息
    //最好不要采用连接查询,避免增加查询次数
    public List<Product> getProductsByOId(String oid) throws SQLException {
        //1、创建QueryRunner对象
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        //2、编写sql:先根据oid查询订单项目表中的pid
        String sql = "select pid from orderitem where oid = ?";

        //3、执行sql:查询oid对应的pid
        List<String> pids = qr.query(sql, new BeanListHandler<String>(String.class), oid);

        //4、根据查询到的pid查询商品并放入集合中
        List<Product> products = new ArrayList<>();
        ProductDao productDao = new ProductDao();   //用来查询pid对应的商品
        for (String pid : pids) {
            Product productById = productDao.getProductById(pid);
            //将查询到的添加进集合中
            products.add(productById);
        }

        //5、返回获取到的products集合
        return products;
    }
List<String> pids = qr.query(sql, new BeanListHandler<String>(String.class), oid);

上面的这行代码会导致集合中元素都为null,我们要特别注意,将查询结果放入ResultSet实现类中时(如BeanHandler和BeanListHandler)指定的是要放入的结果实体,而不是类型。也就是说,我们指定的实体应该是一个容器,这个容器中应该包含有查询到的数据的各个字段
所以该行代码出错的原因就是因为String类型作为一个javabean中内部是没有包含String类型的一个pid让查询到的pid字段进行匹配存放的。不要误以为是查询到的pid是String类型这里就指定为String类型,这和泛型还是不一样的。应该改为

//需求2: 获取订单编号为 order001的订单中的所有商品信息
    //最好不要采用连接查询,避免增加查询次数
    public List<Product> getProductsByOId(String oid) throws SQLException {
        //1、创建QueryRunner对象
        QueryRunner qr = new QueryRunner(DruidUtils.getDataSource());

        //2、编写sql:先根据oid查询订单项目表中的pid
        String sql = "select pid from orderitem where oid = ?";

        //3、执行sql:查询oid对应的pid
        List<OrderItem> orderItems = qr.query(sql, new BeanListHandler<OrderItem>(OrderItem.class), oid);

        //4、根据查询到的pid查询商品并放入集合中
        List<Product> products = new ArrayList<>();
        ProductDao productDao = new ProductDao();   //用来查询pid对应的商品
        for (OrderItem orderItem : orderItems) {
            String pid = orderItem.getPid();
            Product productById = productDao.getProductById(pid);
            //将查询到的添加进集合中
            products.add(productById);
        }

        //5、返回获取到的products集合
        return products;
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值