Flink环境中,实现:在MySQL中查询一张表的所有数据,把查询的数据封装到List集合中。代码如下:
List<TableProcess> list = queryList(getMySQLConnection(), "select * from gmall_config.table_process", TableProcess.class,true);
for (TableProcess object : list) {
System.out.println(object);
}
现象:得不到对象的数据,全是null值
原因:由于MySQL中的列名是使用下划线命名法,而java中使用驼峰命名,列名对不上,写不进去
解决办法:使用到了一个 commons-beanutils 工具类
//默认下划线不转驼峰
boolean flag = false;
if (isToCamel.length>0) {//如果有传入,则应用传入的值
flag = isToCamel[0];
}
//执行sql语句,将查询的结果封装到List集合
ArrayList<T> list = new ArrayList<>();
//预处理
//在try中执行ps,会自动关闭ps,无需我们动手
try( PreparedStatement ps = conn.prepareStatement(querySQL)) {
//执行sql
ResultSet resultSet = ps.executeQuery();
//获取每一行有多少列
ResultSetMetaData metaData = resultSet.getMetaData();
//将结果封装到sql
while (resultSet.next()) {
//表示遍历到了一行
//这一行有很多的列,把每行数据封装到一个对象T中,每列就是T中的一个属性
T t = tClass.newInstance();//调用无参构造器创建对象
//在java中,只要创建对象,就一定调用了构造器,
//每一行有多少行?
for (int i = 1; i <= metaData.getColumnCount(); i++) {
//列名:T的属性名
//列值:T的属性值
//getColumnName:获取的是原始列名,getColumnLabel获取更新后的列名
String name = metaData.getColumnLabel(i);
if (flag) {
//把name转成驼峰命名
//a_b aB
name = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, name);
}
Object obj = resultSet.getObject(i);
BeanUtils.setProperty(t,name,obj);
}
list.add(t);
}
版权声明:本文为m0_37759590原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。