JDBC中BaseDao封装的executeQuery方法中的反射怎么传参
下面是BaseDao中封装的方法
public <T> List<T> executeQuery(Class<T> clazz,String sql,Object...params) throws Exception {
// 获取连接
Connection connection = JdbcUtilsV2.getConnection();
// 4.创建preparedStatement
PreparedStatement preparedStatement = connection.prepareStatement(sql);
if (params != null && params.length != 0) {
for (int i = 1; i <= params.length; i++) {
preparedStatement.setObject(i, params[i - 1]);
}
}
// 6.发送sql语句
ResultSet resultSet = preparedStatement.executeQuery();
// 7.结果集解析
List<T> list = new ArrayList<>();
// TODO:metaData 存储当前结果集列的信息对象(可以获取列的名称根据下角标,可以获取列的数量)
ResultSetMetaData metaData = resultSet.getMetaData();
// TODO:水平遍历列
int columnCount = metaData.getColumnCount();
while (resultSet.next()) {
T t = clazz.getDeclaredConstructor().newInstance();//调用类的无参构造函数实例化对象
// 一行数据对应一个T类型的对象,
for (int i = 1; i <= columnCount; i++) {
// 对象的属性值
Object value = resultSet.getObject(i);
// 获取指定列下角标的列的名称 ResultSetMetaData
String propertyName = metaData.getColumnLabel(i);//可以获取列的别名
// 通过反射,给对象的属性值进行赋值
Field field = clazz.getDeclaredField(propertyName);
field.setAccessible(true);//属性可以设置,打破private私有修饰
/*
* 参数一:要赋值的对象 如果属性是静态,第一个参数可以为null
* 参数二:具体的属性值
* */
field.set(t,value);
}
list.add(t);
}
// 关闭资源
resultSet.close();
preparedStatement.close();
if(connection.getAutoCommit()){
// 没有事务可以关闭
JdbcUtilsV2.freeConnection();
}
return list;
现在要从外部调用此封装方法,
应该怎么调用