离春天还有几天。将 Spring-JDBC 集成到我的 Web 应用程序中。我成功地在我的数据库上执行了 CRUD 操作,对样板代码减少印象深刻。但我没有query*()
使用NamedParameterJDBCTemplate
. 互联网上的大多数示例都提供了RowMapper
or 或ResultSetExtractor
. 虽然这两种用途都很好,但它迫使我创建必须实现这些接口的类。我必须为我为数据库加载的每种类型的数据创建 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());
但是,如果我只想从我的数据库中检索两个/三个值,我不能使用上面的模式,因为它会生成一个BadSqlGrammarException: releaseDate does not exist in ResultSet
. 例子 :
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());
模板是NamedParameterJDBCTemplate
. 请为我提供这些情况的解决方案。