RowMapper 인터페이스란?
👀 공식문서 Say "row 단위로 ResultSet의 row를 매핑하기 위해 JdbcTemplate에서 사용하는 인터페이스"
간단히 말해서 그냥 Row를 객체에 매핑한다고 생각하면 된다!
RowMapper의 특징
이 인터페이스 구현 시, 각 row를 ResultSet에 매핑하는 실제 작업을 수행하지만 예외 처리에 대해 생각하지 않아도 된다!
RowMapper 객체는 일반적으로 상태가 없으므로 재사용이 가능하므로 row 매핑 로직을 한 곳에서 구현하는 것이 좋다.
메서드
@Nullable
T mapRow(ResultSet rs, int rowNum) throws SQLException
ResultSet 의 데이터의 각 행을 매핑하는 메서드 즉, 데이터베이스의 반환 결과인 ResultSet을 객체 형태로 변환해주며
ResultSet의 값을 count 수만큼 반복할 수 있다.
rowNum은 현재 처리 중인 ResultSet의 row 인덱스를 의미한다. (= 말 그대로 행 번호)
rowNum가 1이라면 ResultSet중에 첫번째 row를 처리하는 것이다.
🤔 이 메서드는 현재 행의 값만 매핑하기 때문에, ResultSet 에서 next()를 호출할 수 없다.
사용 예시
RowMapper<Member> rowMapper = (ResultSet resultSet, int rowNum) -> Member
.builder()
.id(resultSet.getLong("id"))
.email(resultSet.getString("email"))
.nickname(resultSet.getString("nickname"))
.createdAt(resultSet.getObject("createdAt"), LocalDateTime.class)
.birthday(resultSet.getObject("birthday", LocalDate.class)
.build();
해당 예시는 sql 쿼리를 통해 반환받은 Resultset에서 rowNum만큼 반복하여 매핑시킨 User 객체들을 RowMapper를 반환한다.
해당 쿼리문은 아래와 같다!
var sql = "SELECT * FROM %s WHERE id = :id";
var param = new MapSqlParameterSource()
.addValue("id", id); // 위의 sql이라는 변수의 :id에 바인딩됨
'Spring 🟢' 카테고리의 다른 글
LazyConnectionDataSourceProxy에 대해 알아보자 (0) | 2024.10.25 |
---|---|
[Spring] 시큐리티로 JWT 로그인 구현하기 (0) | 2023.10.20 |
[JPA] 기본키 매핑(IDENTITY, SEQUENCE 전략) (0) | 2023.08.11 |
filter와 Interceptor (0) | 2023.08.04 |
[Intellij] Cause: error: invalid source release: 16 해결하기 (0) | 2023.06.02 |