数据库
首页 > 数据库> > 如何使用Spring jdbc模板(jdbcTemplate或namedParameterJDBCTem)从数据库中检索值

如何使用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