프레임워크/Spring

[Spring] NamedParameterJdbcTemplate 이란 무엇인가?

멍토 2021. 6. 22.

기존에 사용하던 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);
}

출처 : https://docs.spring.io/spring-framework/docs/current/reference/html/data-access.html#jdbc-NamedParameterJdbcTemplate

댓글

💲 광고입니다.