기존에 사용하던 JdbcTemplate 같은 경우는 우리가 데이터를 넣을 부분에 ?를 이용하여 처리를 했다.
이러한 방식은 인자 위치에 대한 순서가 강제되는데 이러한 방식은 가독성을 떨어트린다.
그래서 나온것이 NamedParameterJdbcTemplate이다.
NamedParameterJdbcTemplate는 ?대신 :변수명 을 이용하여 처리함으로써 순서에 강제를 받지 않는다.
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(*) from T_ACTOR where first_name = :first_name";
SqlParameterSource namedParameters = new MapSqlParameterSource("first_name", firstName);
return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
값은 ParameterSource를 이용하여 입력을 해준다.
아래와 같이 Map으로도 처리가 가능하다.
public int countOfActorsByFirstName(String firstName) {
String sql = "select count(*) from T_ACTOR where first_name = :first_name";
Map<String, String> namedParameters = Collections.singletonMap("first_name", firstName);
return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
개인적으로 강력하다고 생각되는 기능은 객체와 매핑하는 것이다.
public class Actor {
private Long id;
private String firstName;
private String lastName;
public String getFirstName() {
return this.firstName;
}
public String getLastName() {
return this.lastName;
}
public Long getId() {
return this.id;
}
}
Actor의 코드가 위와 같다고 할때 BeanPropertySqlParameterSource를 이용하면 아래와 같이 편하게 처리가 가능하다.
public int countOfActors(Actor exampleActor) {
String sql = "select count(*) from T_ACTOR where first_name = :firstName and last_name = :lastName";
SqlParameterSource namedParameters = new BeanPropertySqlParameterSource(exampleActor);
return this.namedParameterJdbcTemplate.queryForObject(sql, namedParameters, Integer.class);
}
'프레임워크 > Spring' 카테고리의 다른 글
[Spring] @SpringBootApplication이란 무엇인가? (0) | 2021.06.23 |
---|---|
[Spring] SimpleJdbcInsert란 무엇인가? (0) | 2021.06.22 |
[Spring] JdbcTemplate이란 무엇인가? (0) | 2021.04.28 |
[Spring] @ExceptionHandler와 @ControllerAdvice란 무엇인가? (0) | 2021.04.27 |
[Spring] @ResponseBody와 ResponseEntity의 차이는 무엇일까? (0) | 2021.04.25 |
댓글