JDBCTemplate queryForMap用于检索多行

use*_*944 15 java spring jdbctemplate spring-3

queryForMap如果查询返回多行,我可以使用吗?

对于单行,以下代码工作正常.

public Map<String, Object> retrieveMultipleRowsColumns(String deptName){
    return jdbcTemplate.queryForMap("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName);
}
Run Code Online (Sandbox Code Playgroud)

如何修改多行?

小智 21

我知道这很老了,但是如果你正在寻找一张地图,有一种更简单的方法可以做到这一点.

只需实现ResultSetExtractor接口即可定义要返回的类型.以下是如何使用它的示例.您将手动映射它,但对于简单的映射,它应该是直截了当的.

jdbcTemplate.query("select string1,string2 from table where x=1", new ResultSetExtractor<Map>(){
    @Override
    public Map extractData(ResultSet rs) throws SQLException,DataAccessException {
        HashMap<String,String> mapRet= new HashMap<String,String>();
        while(rs.next()){
            mapRet.put(rs.getString("string1"),rs.getString("string2"));
        }
        return mapRet;
    }
});
Run Code Online (Sandbox Code Playgroud)

这将为您提供返回类型的Map,该Map具有多行(无论您的查询返回多少),而不是地图列表.您可以在此处查看ResultSetExtractor文档:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/ResultSetExtractor.html


Joh*_*lly 18

使用queryForList 请参阅javadoc以获取完整详细信息.它回来了List<Map<String,Object>>

public List<Map<String, Object>> retrieveMultipleRowsColumns(String deptName){
    return jdbcTemplate.queryForList("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName);
}
Run Code Online (Sandbox Code Playgroud)

  • 地图列表不是很有用. (5认同)
  • 根据上下文,不正确的地图列表可能非常有用. (5认同)