如何使用Spring jdbc模板(jdbcTemplate或namedParameterJDBCTem)从数据库中检索值
作者:互联网
现在进入春天的几天.将Spring-JDBC集成到我的Web应用程序中.我成功地在我的DB上执行CRUD操作,对锅炉板代码的减少印象深刻.但我没有使用NamedParameterJDBCTemplate中提供的查询*()方法. Internet上的大多数示例都提供了RowMapper或ResultSetExtractor的用法.虽然两种用法都很好,但它迫使我创建必须实现这些接口的类.我必须为我为DB加载的每种类型的数据创建bean(或者我可能是错的).
问题出现在代码部分我使用过这样的东西:
String query="select username, password from usertable where username=?"
ps=conn.prepareStatement(query);
ps.setString(username);
rs=ps.executeQuery();
if(rs.next()){
String username=rs.getString("username");
String password=rs.getString("password")
//Performs operation on them
}
由于这些值不存储在任何bean中并直接使用,因此我无法在这种情况下集成jdbcTemplate.
当我从数据库中仅提取bean中存在的部分属性时,会出现另一种情况.
例:
public class MangaBean{
private String author;
private String title;
private String isbn;
private String releaseDate;
private String rating;
//getters and setters
}
制图员:
public class MangaBeanMapper implements RowMapper<MangaBean>{
@Override
public MangaBean mapRow(ResultSet rs, int arg1) throws SQLException {
MangaBean mb=new MangaBean();
mb.setAuthor(rs.getString("author"));
mb.setTitle(rs.getString("title"));
mb.setIsbn(rs.getString("isbn"));
mb.setReleaseDate(rs.getString("releaseDate"));
mb.setRating(rs.getString("rating"));
return mb;
}
}
以上安排如下:
String query="select * from manga_data where isbn=:isbn"
Map<String, String> paramMap=new HashMap<String, String>();
paramMap.put("isbn", someBean.getIsbn());
return template.query(query, paramMap, new MangaBeanMapper());
但是,如果我只想从我的db中检索两个/三个值,我就不能使用上面的模式,因为它生成BadSqlGrammarException:ResultSet中不存在releaseDate.示例:
String query="select title, author where isbn=:isbn"
Map<String, String> paramMap=new HashMap<String, String>();
paramMap.put("isbn", someBean.getIsbn());
return template.query(query, paramMap, new MangaBeanMapper());
Template是NamedParameterJDBCTemplate的一个实例.请告诉我这些情况的解决方案.
解决方法:
其他答案是明智的:您应该创建一个DTO bean,或使用BeanPropertyRowMapper.
但是如果你想能够拥有比BeanPropertyRowMapper更多的控制权,(或者反射使它太慢),你可以使用
queryForMap
方法,它将返回一个映射列表(每行一个),返回的列为键.因为您可以在Map上调用get(/ *键不存在* /)而不抛出异常(它只返回null),所以无论选择哪个列,都可以使用相同的代码填充对象.
标签:spring-jdbc,java,spring 来源: https://codeday.me/bug/20190729/1569853.html