クエリによって複数の行が返された場合、queryForMap
を使用できますか。
単一の行の場合、以下のコードは正常に機能します。
public Map<String, Object> retrieveMultipleRowsColumns(String deptName){
return jdbcTemplate.queryForMap("SELECT DEPT_ID,DEPT_NAME FROM DEPT WHERE DEPT_NAME = ?", deptName);
}
これを複数の行に変更するにはどうすればよいですか?
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);
}
私はこれが本当に古いことを知っていますが、地図を探しているならこれをするもっと簡単な方法があります。
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