Как вернуть данные с помощью JdbcTemplate с предложением IN - PullRequest
0 голосов
/ 20 мая 2019

Я не могу выполнить возврат значения предложения в sql, используя JdbcTemplate Spring Java, где вы можете использовать список выражений или строк для передачи в качестве аргумента.

Я пытался выполнитьприсваивание с массивом Object, как в примере ниже:

Object [] values ​​= new Object [] {listDepartment};

следует примерам классов ниже:

Модель класса - сотрудник

public class EmployeeDTO {

    private Integer employeeId;

    private String firstName;

    private String lastName;

    private String jobId;

    private Integer departamentId;

    public EmployeeDTO(){}
    public EtiquetaAvulsaDTO(Integer employeeId, String firstName, String lastName, String jobId,
            Integer departamentId) {
        super();
        this.employeeId = employeeId;
        this.firstName = firstName;
        this.lastName = lastName;
        this.jobId = jobId;
        this.departmentId = departmentId;
    }

    public Integer getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(Integer employeeId) {
        this.employeeId = employeeId;
    }


    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }

        public String getJobId() {
        return jobId;
    }

    public void setJobId(String jobId) {
        this.jobId = jobId;
    }


    public Integer getDepartmentId() {
        return employeeId;
    }

    public void setDepartmentId(Integer departmentId) {
        this.departmentId = departmentId;
    }

}

класс: EmployeeService

public class EmployeeService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

   String GET_LIST_EMPLOYEES ="SELECT e.EMPLOYEE_ID AS employeeId, e.FIRST_NAME AS firstName, e.LAST_NAME AS lastName, e.JOB_ID AS jobId, e.DEPARTMENT_ID as departmentId FROM hr.employees e WHERE e.DEPARTMENT_ID IN (:listDepartment)";

    /**
     * TODO AINDA FALTA IMPLEMENTAÇAO PARA RETORNAR UMA LISTA E O JDBC TEMPLATE TRANSFORMAR ELE COMO CLAUSULA SQL (IN)
     * @param listDepartment
     * @return
     */
    @SuppressWarnings({ "unchecked", "rawtypes" })
    public List<EmployeeDTO> listEmployees( List<Integer> listDepartment){

            Object[] values = new Object[] { listDepartment };

        List<EmployeeDTO> result = (List<EmployeeDTO>) this.jdbcTemplate.query(GET_LIST_EMPLOYEES, values,
        new RowMapper() {
            public Object mapRow(ResultSet rs, int rowNum) throws SQLException{

                EmployeeDTO employee = new EmployeeDTO();                

                        employee.setEmployeeId(rs.getInt("employeeId"));
                        employee.setFirstName(rs.getString("firstName"));            
                        employee.setLastName(rs.getString("lastName"));        
                        employee.setJobId(rs.getString("jobId"));       
                        employee.setDepartmentId(rs.getInt("departmentId")); 

                 return employee;
            }
        }
    );
        return result;

    }
}

classe: EmployeeRestController - поиск метода - возврат списка по конечной точке.

    @GetMapping(value="/employees/lista/search", produces = "application/json")
    public List<EmployeeDTO> listEmployee(@RequestParam(value = "listEmp") List<Integer> listDepartmentId
) {

        return employeeService.listEmployees(listDepartmentId);
}

В выводе выполнения возвращается следующая ошибка:

java.sql.SQLException: недопустимый тип столбца

1 Ответ

0 голосов
/ 21 мая 2019

Я решил проблему, в моем случае я использовал NamedParameterJdbcTemplate класс EmployeeService остался, как показано ниже:

public class EmployeeService {

    @Autowired
    private JdbcTemplate jdbcTemplate;

    String GET_LIST_EMPLOYEES ="SELECT e.EMPLOYEE_ID AS employeeId, e.FIRST_NAME AS firstName, e.LAST_NAME AS lastName, e.JOB_ID AS jobId, e.DEPARTMENT_ID as departmentId FROM hr.employees e ";


    @SuppressWarnings({ "unchecked", "rawtypes" })
    public List<EmployeeDTO> listEmployees( List<Integer> listDepartment){

        NamedParameterJdbcTemplate template = new NamedParameterJdbcTemplate(jdbcTemplate.getDataSource());

        Map<String,Object> params = new HashMap<String,Object>();
        params.put("listDepartment", listDepartment);

        List<EmployeeDTO> result = (List<EmployeeDTO>) template.query(GET_LIST_EMPLOYEES + "WHERE e.DEPARTMENT_ID IN (:listDepartment)", params,
        new RowMapper() {
            public Object mapRow(ResultSet rs, int rowNum) throws SQLException{

                EmployeeDTO employee = new EmployeeDTO();                

                        employee.setEmployeeId(rs.getInt("employeeId"));
                        employee.setFirstName(rs.getString("firstName"));            
                        employee.setLastName(rs.getString("lastName"));        
                        employee.setJobId(rs.getString("jobId"));       
                        employee.setDepartmentId(rs.getInt("departmentId")); 

                 return employee;
            }
        }
    );
        return result;

    }

 }
...