问题描述
注意:这里其实不是一个问题是记录一下
为什么在查询用户方法里面调用的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集合中
!!!!!!!好了解决了!!!!!!!