db에서 레코드 목록을 가져 오기 위해 Spring 프레임 워크의 jdbcTemplate을 사용하고 있습니다. 이제 쿼리에 제약 조건을 추가하여 필터링을 추가하려고합니다. 예를 들어. 목록이 사람과 쇼 나타내는 말 - 이름, 이메일과 위치를복잡한 프레임 워크를 사용하는 스프링 프레임 워크의 jdbcTemplate 사용
원래 쿼리 필터에 따라
String sql = "SELECT name, email, location FROM persons WHERE status = ?";
입니다, 제약 조건이 추가됩니다
if(filters.containsKey("person_name")) {
sql += " AND name LIKE '%" + filters.get("person_name") + "%'";
}
//similarly
if(filters.containsKey("person_email")) {
....
}
//similarly
if(filters.containsKey("person_location")) {
....
}
따라서 쿼리는 것이다 jdbcTemplate 객체의 질의 메소드에 전달하여 작성하고 실행한다.
this.jdbcTemplate.query(sql, new Object[] { 1 }, RowMapper<Person> rowmapper)
필자는 위의 방법을 사용하여 필터가 적용된 값이 이스케이프없이 쿼리에 직접 기록되므로 주입에 취약해질 것이라고 우려했습니다.
쿼리가 작성된 것처럼 동적으로 두 번째 매개 변수 (arguments 배열)를 만들 수 있습니까?
jdbcTemplate을 사용하는 다른 방법이 있습니까?
편집 : 지금 값을 탈출 org.apache.commons.lang.StringEscapeUtils에서 StringEscapeUtils.escapeSql을 사용하고 . 그러나 여전히 더 좋은 방법이나 봄이 이미 제공 한 방법을 찾고 있습니다.
감사합니다.
로 인수를 필요로 할 때. 그러나 객체 배열 ('new Object [] {..}')을 동적으로 생성하는 방법은 무엇입니까? – naiquevin
내 업데이트 된 답변보기 –
는 알아 냈어야합니다 :) .. thanks a ton – naiquevin