차근차근 한걸음씩 개발 일기

[Spring] - NamedParameterJdbcTemplate 본문

백엔드 개발/Spring 개발

[Spring] - NamedParameterJdbcTemplate

노승희 2023. 2. 22. 17:46

* 백엔드 개발자를 위한 한 번에 끝내는 대용량 데이터 & 트래픽 처리 초격차 패키지

 => Part1 / Ch 04 / 02. 회원정보 등록 구현

 

JdbcTemplate 관련 내용 URL

https://bibi6666667.tistory.com/300

 

NamedParameterJdbcTemplate : 기존 jdbc는 변수 매핑을 ?을 대신해서 객체에서는 변수 매핑을 이름을 통해서 하는 것이 가능하다. SQL문에 여러 파라미터를 가지고 있을 때 특히 유용하다.

사용하기 위해서는 DB와 연결된 dataSource와 연결되어져 있어야한다.

NamedParamterJdbcTemplate는 기본적으로 변수를 Map 객체를 통해서 받아 적용시킨다.


- NamedParameterJdbcTemplate.queryForObject(sql,params(Map),rowMapper) : 한줄의 열을 처리함

- NamedParameterJdbcTemplate.query(sql,params,rowMapper) : 여러 줄을 처리하고 리턴
- NamedParameterJdbcTemplate.update(sql,params,rowMapper) : delete,insert,update 등을 처리하는 메소드

 

예제

@RequiredArgsConstructor
@Repository
public class MemberNicknameHistoryRepository {
    final private NamedParameterJdbcTemplate namedParameterJdbcTemplate;
    
    private MemberNicknameHistory insert(MemberNicknameHistory history) {
        SimpleJdbcInsert simpleJdbcInsert = new SimpleJdbcInsert(namedParameterJdbcTemplate.getJdbcTemplate())
                .withTableName(TABLE)
                .usingGeneratedKeyColumns("id");
        SqlParameterSource params = new BeanPropertySqlParameterSource(history);
        var id = simpleJdbcInsert.executeAndReturnKey(params).longValue();

        return MemberNicknameHistory
                .builder()
                .id(id)
                .memberId(history.getMemberId())
                .nickname(history.getNickname())
                .createdAt(history.getCreatedAt())
                .build();
    }
}