web-dev-qa-db-ja.com

複数の行を取得するためのJDBCTemplate queryForMap

クエリによって複数の行が返された場合、queryForMapを使用できますか。

単一の行の場合、以下のコードは正常に機能します。

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

これを複数の行に変更するにはどうすればよいですか?

15
user182944

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);
}
17
John Farrelly

私はこれが本当に古いことを知っていますが、地図を探しているならこれをするもっと簡単な方法があります。

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;
    }
});

これにより、マップのリストではなく、複数の行を持つクエリの戻りタイプ(クエリの多くが返されます)が得られます。 ResultSetExtractorのドキュメントは、ここで表示できます。 http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jdbc/core/ResultSetExtractor.html

21
Brian Beech