我是 Spring 新手,我正在尝试使用 spring jdbcTemplate 从表中获取数据并设置为 pojo 类,如下代码所示,
@RequestMapping(value = "/getdevicedata/{macId}", method = RequestMethod.GET, produces = "application/json")
@ResponseBody
public DeviceAnalyse getDevicedata(@PathVariable String macId, HttpServletResponse response) throws Exception {
DeviceAnalyse deviceAnalyse = new DeviceAnalyse();
//List<DeviceAnalyse> deviceAnalyse = new ArrayList<>();
if (!isValidMacId(macId)) {
deviceAnalyse.setDId("Invalid device Id");
return deviceAnalyse;
}
DeviceAnalyse temp = new DeviceAnalyse();
try{
temp = new DeviceAnalyse();
String sql = "select value,serverTimeStamp,sensorType,percentage from tablename";
temp = (DeviceAnalyse)jdbcTemplate.queryForObject(sql, new Object[]{macId}, new BeanPropertyRowMapper(DeviceAnalyse.class));
deviceAnalyse.setPercentage(temp.getPercentage());
deviceAnalyse.setSensorType(temp.getSensorType());
deviceAnalyse.setServerTimeStamp(temp.getServerTimeStamp());
deviceAnalyse.setValue(temp.getValue());
}
catch(Exception e){
System.out.println(e);
e.printStackTrace();
deviceAnalyse.setPercentage(0L);
deviceAnalyse.setSensorType("");
deviceAnalyse.setServerTimeStamp(null);
deviceAnalyse.setValue(0L);
}
return deviceAnalyse;
}
这里的DeviceAnalyse是我的pojo类,它有所有的getter setter。但我得到结果大小不正确:预期 1,实际 4。
如何解决这个问题并将所有检索值设置为 pojo 类?喜欢
while(resultset.next())
{
deviceAnalyse.setPercentage(temp.getPercentage());
deviceAnalyse.setSensorType(temp.getSensorType());
deviceAnalyse.setServerTimeStamp(temp.getServerTimeStamp());
deviceAnalyse.setValue(temp.getValue());
}
最佳答案
您在代码中犯了一个简单的错误。您应该调用jdbcTemplate.query
而不是jdbcTemplate.queryForObject
.
jdbcTemplate.queryForObject
预计结果中只有一行,因为 RowMapperResultSetExtractor
初始化为 1
。相反 jdbcTemplate.query
返回所有行。
不要忘记更改您的 temp
变量为List<DeviceAnalyse>
.
调用jdbcTemplate
可能看起来像这样:
List<DeviceAnalyse> temp = jdbcTemplate.query(sql, new Object[]{macId}, new BeanPropertyRowMapper(DeviceAnalyse.class));
关于java - 如何使用jdbcTemplate为pojo类变量设置多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33800019/