需要传入的参数有Connection对象,需要执行的Sql语句,返回的javabean类
所需依赖整体代码commons-beanutils commons-beanutils1.9.3 com.google.guava guava29.0-jre
import com.google.common.base.CaseFormat;
import org.apache.commons.beanutils.BeanUtils;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
public class JdbcUtil {
public static List queryList(Connection connection,
String sql,
Class clz,
boolean underScoreToCamel)
throws Exception {
//创建集合用于存放查询结果对象
ArrayList result = new ArrayList<>();
//编译SQL语句
PreparedStatement preparedStatement = connection.prepareStatement(sql);
//执行查询.获得结果集
ResultSet resultSet = preparedStatement.executeQuery();
//从结果集元数据获取返回的列数
ResultSetmetaData metaData = resultSet.getmetaData();
int columnCount = metaData.getColumnCount();
//遍历resultSet,对每行数据封装 T 对象,并将 T 对象添加至集合
while (resultSet.next()) {
//通过反射创建泛型对象
T t = clz.newInstance();
//jdbc中从1开始
for (int i = 1; i < columnCount + 1; i++) {
String columnName = metaData.getColumnName(i);
Object value = resultSet.getObject(i);
//mysql中因为大小写不敏感,所以大部分的字段名用下划线命名法
//但是在javabean中,大部分使用驼峰命名法,所以使用到guava包中的格式转换方法(如果参数为true的话,默认为false)
if (underScoreToCamel) {
columnName = CaseFormat
.LOWER_UNDERSCORE
.to(CaseFormat.LOWER_CAMEL, columnName.toLowerCase());
}
//使用BeanUtils为字段赋值.具有通用性
BeanUtils.setProperty(t, columnName, value);
}
//添加进结果列表
result.add(t);
}
resultSet.close();
preparedStatement.close();
//返回结果集
return result;
}
public static List queryList(Connection connection,
String sql,
Class clz) throws Exception {
//列名格式转换默认关闭
return queryList(connection,sql,clz,false);
}
}



