NamedParameterJdbcTemplate 알아보기

CJI0524·2025년 4월 3일
0

Spring/JDBC

목록 보기
3/3

1. NamedParameterJdbcTemplate 이란?

NamedParameterJdbcTemplate은 스프링 JDBC 모듈에서 제공하는 클래스이다. 일반적인 JdbcTemplate는 SQL 쿼리에서 물음표 (?)로 파라미터를 지정하는데, 이 방식은 파라미터의 순서가 중요해서 코드 가독성이 떨어지고 실수하기 쉽다.

반면 NamedParameterJdbcTemplate은 파라미터에 이름 (:name, :id 등)을 부여해서 사용할 수 있게 해준다.

또한 NamedParameterJdbcTemplate은 맵 기반 (Map<String, Object>) 형태로 파라미터를 전달하므로, 파라미터 이름과 값을 쉽게 매핑할 수 있다.

2. 사용 예제

✍️ 예제 코드

public class UserRepository {

    private NamedParameterJdbcTemplate jdbcTemplate;

    // 생성자에서 DataSource를 받아 NamedParameterJdbcTemplate 객체 생성
    public UserRepository(DataSource dataSource) {
        this.jdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
    }

    // 사용자 조회 예제: id가 일치하는 사용자 조회
    public User findUserById(Long id) {
        String sql = "SELECT id, name, email FROM users WHERE id = :userId";
        MapSqlParameterSource params = new MapSqlParameterSource();
        params.addValue("userId", id);

        return jdbcTemplate.queryForObject(sql, params, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                User user = new User();
                user.setId(rs.getLong("id"));
                user.setName(rs.getString("name"));
                user.setEmail(rs.getString("email"));
                return user;
            }
        });
    }

    // 사용자 리스트 조회 예제: 이름에 해당하는 사용자들 조회
    public List<User> findUsersByName(String name) {
        String sql = "SELECT id, name, email FROM users WHERE name = :name";
        MapSqlParameterSource params = new MapSqlParameterSource();
        params.addValue("name", name);

        return jdbcTemplate.query(sql, params, new RowMapper<User>() {
            @Override
            public User mapRow(ResultSet rs, int rowNum) throws SQLException {
                User user = new User();
                user.setId(rs.getLong("id"));
                user.setName(rs.getString("name"));
                user.setEmail(rs.getString("email"));
                return user;
            }
        });
    }
}

3. 이 글을 작성하는데 참고한 글 목록

멋쟁이사자처럼 강의자료

profile
개발돌이

0개의 댓글