首页 > 解决方案 > Returning Map from JDBC template execution

问题描述

public List<Employee> getEmployeeDetails() {
    return jdbcTemplate.query(GET_EMPLOYEE_SQL, new RowMapper<Employee>() {
        @Override
        public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
            Employee employee = new Employee();
            employee.setCode(rs.getBigDecimal("cd"));
            employee.setAddress(rs.getString("address"));
            employee.setContactNo((rs.getString("contactNo")));

            return employee;
        }
    });
}

what I need to do from above method its returning List but I need to return

Map<BigDecimal, List<Employee>> employeeMap = new HashMap<>();

while doing that getting exception 

Type mismatch: cannot convert from List<Map<BigDecimal, Employee>> to Map<BigDecimal, Employee>

Please find below code

public Map<BigDecimal, Employee> getEmployeeDetails() {
Map<BigDecimal, Employee> employeeMap = new HashMap<>();

    return jdbcTemplate.query(GET_EMPLOYEE_SQL, new RowMapper<Map<String, Employee>>() {
        @Override
        public Map<BigDecimal, Employee> mapRow(ResultSet rs, int rowNum) throws SQLException {
            Employee employee = new Employee();
            employee.setCode(rs.getBigDecimal("cd"));
            employee.setAddress(rs.getString("address"));
            employee.setContactNo((rs.getString("contactNo")));

            employeeMap.put(rs.getBigDecimal("cd"), employee);

            return employeeMap;
        }
    });
}

标签: javajdbctemplate

解决方案


你可以做两件事,

  1. 不要返回查询语句,employeeMap在您的 getEmployeeDetails() 方法中返回。

  2. 对于您对查询的期望,您必须使用ResultSetExtractornotRowMapper与 RowMapper 一起为每一行执行操作,因此它始终返回列表。

有了ResultSetExtractor你可以做类似的事情

return template.query(GET_EMPLOYEE_SQL, new ResultSetExtractor<Map<BigDecimal, Employee>>() {
        @Override
        public Map<BigDecimal, Employee> extractData(ResultSet rs) throws SQLException, DataAccessException {
            Map<BigDecimal, Employee> employeeMap = new HashMap<>();
            while (rs.next()) {
                Employee employee = new Employee();
                employee.setCode(rs.getBigDecimal("cd"));
                employee.setAddress(rs.getString("address"));
                employee.setContactNo((rs.getString("contactNo")));
                employeeMap.put(rs.getBigDecimal("cd"), employee); 
            }
            return employeeMap;
        }
    });

推荐阅读