본문 바로가기

Back-End/DataBase

Spring JdbcTemplate의 RowMapper()

이 글을 쓰게 된 이유는 JDBCTemplate에서 MySql을 사용하며 RowMapper()를 쓰는데 자꾸 헷갈려서 쓰게 됐음.

JdbcTemplate의 RowMapper는 SQL 쿼리 결과인 ResultSet을 자바(일반적으로 엔티티 객체)로 변환하는 역할을 한다.
JdbcTemplate를 사용하여 데이터를 조회할 때 SQL 쿼리를 실행하고, 그 결과를 자바 객체로 변환하는 과정에서 중요한 부분이 바로 RowMapper이다.

1. RowMapper란?
RowMapper는 ResultSet의 각 행을 자바 객체로 변환하는 인터페이스이다.

RowMapper의 작동방식은

  1. SQL 쿼리 결과를 행 단위로 반환. 
  2. RowMapper는 ResultSet의 한 행을 자바 객체로 매핑하는 역할을 한다.
    그럼 RowMapper 인터페이스는 mapRow(ResultSet rs, int rowNum) 메서드를 구현해야 함.
    이 메서드는 ResultSet의 한 행을 받아서 해당 데이터를 자바 객체로 변환한다.

2. RowMapper의 사용 흐름

  1. SQL 쿼리 실행 : JdbcTemplate.query() 또는 JdbcTemplate.queryForObject() 메서드를 호출하면, SQL 쿼리가 실행
  2. RowMapper 호출 : 쿼리 결과의 각 행을 RowMapper가 처리하여 자바 객체로 변환된다.
  3. 자바 객체 변환 : 변환된 자바 객체(또는 엔티티)는 JdbcTemplate으로 반환된다.

3. RowMapper를 이용한 매핑 예시

1. 데이터베이스 테이블 구조

컬럼 타입
id INT
name VARCHAR
age INT

2. Student 엔티티 클래스

@Getter
@AllArgsConstructor
public class Student {
    private Long id;
    private String name;
    private int age;
}

3. JdbcTemplate를 사용한 RowMapper 적용
JdbcTemplate를 사용하여 Student 객체를 조회하는 메서드 작성

public List<Student> findAllStudents() {
    String sql = "SELECT id, name, age FROM student";

    // JdbcTemplate의 query 메서드에서 SQL 쿼리와 RowMapper를 넘겨줌
    List<Student> students = jdbcTemplate.query(sql, studentRowMapper());  // 결과를 Student 객체로 매핑하여 반환
    return students
}
  • 위 코드에서는 SELECT id, name, age FROM student SQL 쿼리를 실행하여 student 테이블의 모든 데이터를 조회한다. 그 후, JdbcTemplate.query() 메서드는 각 결과 행 RowMapper를 통해 Student 객체로 변환하여 리스트로 반환한다.

4. RowMapper 구현
RowMapper를 사용해서 Student 객체로 매핑하는 방법

private RowMapper<Student> studentRowMapper() {
    return new RowMapper<Student>() {
        @Override
        public Student mapRow(ResultSet rs, int rowNum) throws SQLException {
            // ResultSet에서 데이터를 읽어 Student 객체로 변환
            Long id = rs.getLong("id");    // 'id' 컬럼 값을 읽어옴
            String name = rs.getString("name");  // 'name' 컬럼 값을 읽어옴
            int age = rs.getInt("age");  // 'age' 컬럼 값을 읽어옴

            // 읽은 데이터를 가지고 새로운 Student 객체를 생성
            return new Student(id, name, age);
        }
    };
}
  • ResultSet에서 id, name, age 값을 읽고
  • 엔티티 객체로 변환
    • Student 객체는 id, name, age를 받아 생성

1. RowMapper와 SQL 쿼리의 관계

  • SQL 쿼리에서 반환하는 데이터는 ResultSet에 저장된다. RowMapper는 이 ResultSet에서 각 열(컬럼)을 읽어와 자바 객체의 필드에 맞게 매핑한다.
  • SQL 쿼리에서 JOIN을 사용하여 여러 테이블을 결합할 경우, RowMapper는 각 테이블의 컬럼을 별도로 매핑하여 엔티티 객체에 포함.

2. RowMapper와 엔티티 관계

RowMapper는 SQL 쿼리 결과를 엔티티로 변환하는 역할을 하므로, RowMapper와 엔티티 클래스는 밀접한 관계가 있음.

  • 엔티티 클래스는 데이터베이스 테이블의 구조를 자바 객체로 표현하는 클래스. 즉, 테이블의 각 컬럼을 객체의 필드로 매핑.
  • RowMapper는 ResultSet에서 데이터를 읽어, 이를 엔티티의 필드에 맞게 변환하는 역할. 즉 SQL 쿼리 결과와 엔티티 간의 중개자 역할을 함.

 

 

 

 

 

'Back-End > DataBase' 카테고리의 다른 글

SQL로 복잡한 쿼리 실습하기  (0) 2025.01.15
SQL로 요리하듯 데이터 다루기  (0) 2025.01.15
커넥션 풀과 데이터소스  (0) 2024.12.06
JDBC - CRUD  (0) 2024.12.06
SQL 기초 3 (Join)  (1) 2024.11.08