java - 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;
}
});
}
解决方案
你可以做两件事,
不要返回查询语句,
employeeMap
在您的 getEmployeeDetails() 方法中返回。对于您对查询的期望,您必须使用
ResultSetExtractor
notRowMapper
与 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;
}
});
推荐阅读
- python - 使用 boto3 在 aws 中其 CPU 扩展策略低于特定阈值的所有自动扩展组的列表
- opentext - 未填充 Outlook 新电子邮件
- android - 我如何解决通过cmd安装Cordova的这个问题
- angular - 表单控件以角度放置在订阅方法中时未正确初始化
- powershell - PowerShell Azure AD B2C 身份体验框架策略密钥,其中名称和密码是输入参数
- simulation - 如何让 http web 浏览器在 inet (omnet++) 中同时运行
- node.js - 我正在将 vue 3 与 apollo/client 一起使用,但出现错误
- javascript - 可以将 JavaScript 添加到 Angular 应用程序中吗?
- javascript - 以与类扩展相同的方式使用构造函数?
- javascript - 如何使用javascript在foreach循环中获取TD的值?