【QueryRunnerd】BeanListHandler,简直可以说是被自己蠢哭了

问题描述

注意:这里其实不是一个问题是记录一下

为什么在查询用户方法里面调用的query方法之后得到的结果是个List集合
上代码:

package app.uitl;

import com.alibaba.druid.pool.DruidDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;

public class DBUtil {
    private static final Properties PROPERTIES;
    private static final DataSource dataSource;

    //    初始化数据库连接池
    static {
        PROPERTIES = new Properties();
        DruidDataSource druidDataSource = new DruidDataSource();
        try {
            InputStream is = DBUtil.class.getClassLoader().getResourceAsStream("db.properties");
            PROPERTIES.load(is);

            druidDataSource.setDriverClassName(PROPERTIES.getProperty("driver"));
            druidDataSource.setUsername(PROPERTIES.getProperty("user"));
            druidDataSource.setPassword(PROPERTIES.getProperty("password"));
            druidDataSource.setUrl(PROPERTIES.getProperty("url"));
            druidDataSource.setTestWhileIdle(false);
        } catch (IOException e) {
            e.printStackTrace();
        }
        dataSource = druidDataSource;
    }

//    增删改方法
    private final static QueryRunner runner = new QueryRunner(dataSource);

    public static int update(String sql, Object... args) {
        try {
            return runner.update(sql, args);
        } catch (SQLException e) {
            return -1;
        }
    }

//    查询
    public static <T> List<T> queryAll(Class<T> clazz, String sql, Object... args) {
        List<T> list = new ArrayList<>();
        try {
            return runner.query(sql, new BeanListHandler<>(clazz), args);
        } catch (SQLException e) {
            return List.of();
        }
    }

}

原因分析:

提示:当时在查看了很多底层代码一直都没有找到能关于List集合的方法或者参数
看如下代码:
这二个参数**new BeanListHandler<>(clazz)**其实不是很理解,但是很渴望通过查看这第二个参数的源码查出什么,结果走弯路了

//    查询
    public static <T> List<T> queryAll(Class<T> clazz, String sql, Object... args) {
        List<T> list = new ArrayList<>();
        try {
            return runner.query(sql, new BeanListHandler<>(clazz), args);
        } catch (SQLException e) {
            return List.of();
        }
    }

哈哈哈哈哈绝了被自己蠢哭了!!!!!!!

解决方案:

后来发现:BeanListHandler表示将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中

!!!!!!!好了解决了!!!!!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值