从JDBC模板执行返回Map

问题描述

Auth\LoginController

我需要从上面的方法中返回其List,但是我需要返回

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

类型不匹配:无法从List >转换为 映射

请找到以下代码

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

while doing that getting exception 

解决方法

您可以做两件事,

  1. 不返回查询语句,请在getEmployeeDetails()方法中返回employeeMap

  2. 出于对查询的期望,您必须对RowMapper使用ResultSetExtractor而不是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;
        }
    });