【发布时间】:2021-10-22 04:00:24
【问题描述】:
我在使用 Spring jdbc RowMapper 时遇到了奇怪的问题:-
这是我的代码
public void test(){
String sql=" Query will fetch records where dateColumn<='2021-08-17' Limit 1";
jdbcTemplate.query(sql, new ModelRowMapper());
}
public class ModelRowMapper implements RowMapper<ModelRowMapper> {
@Override
public ModelRowMapper mapRow(ResultSet rs, int rowNum) throws SQLException {
ModelRowMapper model= new ModelRowMapper();
System.out.println(rs.getString("value"));
}
}
例子:-
db records:-
2021-08-21
2021-08-15
2021-08-13
我期待的输出是2021-08-15
在 ModelRowMapper 类中观察到 resultSet 打印两个值(第一个是有效的:- 2021-08-15)然后打印无效值,在响应中我也会得到无效值
但是当我使用 ResultSetExtractor 时,上面的查询可以正常工作
jdbcTemplate.query(sql, new ResultSetExtractor<String>() {
@Override
public String extractData(ResultSet rs) throws SQLException, DataAccessException {
while (rs.next()) {
System.err.println(rs.getString("value"));
}
//prints only one value and returns the same value
return "";
}
});
rowMapper 会出现什么问题?... 任何建议都会有所帮助.......
【问题讨论】:
-
“无效”值是“2021-08-13”还是不同。如果值为“2021-08-13”,那么您的查询似乎是错误的,因为它没有正确限制结果。 RowMapper 将行映射到您想要的任何对象,但将行映射到 ModelRowMapper 是没有意义的。它应该是
ModelRowMapper implements RowMapper<Model>,其中模型是您的域对象。看看这个tutorial。
标签: java spring resultset rowmapper