inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 DB 2편 - 데이터 접근 활용 기술

JdbcTemplate - 이름 지정 파라미터 2

BeanPropertyRowMapper 관련해서 질문 있습니다.

160

eoyeong

작성한 질문수 57

0

안녕하세요.

 

모든 필드가 final인 클래스에 BeanPropertyRowMapper는 사용 못하는건가요??

 

빈 생성자는 생성하지 못해서

 

각 필드의 기본값으로 초기화 해주는 생성자를 만들었는데

모든 필드가 final이라서 값이 변경이 되지 않아서 그런지 기본값으로 나오더라고요

 

코드는 아래와 같이 작성했습니다

image.pngimage.pngimage.png

 

image.png

 

 

그냥 RowMapper를 직접 만들어서 사용하는게 최선일까요??

 

 

 

 

spring mvc jpa querydsl spring-data-mybatis spring-jpa

답변 1

1

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. 대영님.

BeanPropertyRowMapper는 기본적으로 빈 생성자와 setter 메서드를 사용하여 데이터베이스의 결과를 객체에 매핑합니다. 그러다 보니 모든 필드가 final로 설정된 클래스에는 사용하기 어려운 한계가 있습니다. final 필드의 경우, 초기화 후 값을 변경할 수 없는데, BeanPropertyRowMapper는 setter 메서드에 의존하기 때문에 이를 지원하지 않습니다.

확실한 방법은 RowMapper 인터페이스를 구현하여 수동으로 매핑을 처리하는 것입니다. 사용자의 경우 다음과 같이 RowMapper를 직접 구현하면 모든 필드에 대한 매핑을 명시적으로 지정할 수 있습니다.

private static final RowMapper<Member> memberRowMapper = (rs, rowNum) -> new Member(
    UUID.fromString(rs.getString("memberId")),
    rs.getString("name"),
    rs.getString("phoneNumber"),
    rs.getString("email"),
    rs.getString("groupName"),
    rs.getObject("birthday", LocalDate.class),
    rs.getObject("createdAt", LocalDateTime.class)
);

위와 같은 수동 매핑을 사용하면 final 필드와 특정 매핑 요구사항을 충족할 수 있습니다. 직접 필드 매핑을 수행함으로써 객체의 불변성을 유지하면서 데이터베이스 결과를 올바르게 매핑할 수 있게 됩니다.

관련 질문및 강의에서 다루는 내용을 보시면 더 도움이 될 것 같습니다.
- 스프링 DB - 데이터 접근 기술 활용

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

RepositoryTest의 패키지 위치가 domain인 이유

0

29

2

REQUIRES_NEW 해결 방법에 대해서 질문있습니다!!

0

29

1

update()에 사용하는 setter 질문드립니다.

0

47

1

SQL 중심적 개발의 문제점에 대한 질문

0

72

1

혹시 Containing 을 안쓰신 이유가 있을까요?

0

83

2

[공유] 스프링부트 4.x 버전 mybatis 연동

0

173

1

@repository 어노테이션

0

89

3

ItemService

0

58

1

논리 커밋, 물리 커밋 질문드립니다.

0

54

1

내부 트랜잭션 커밋은 필수인가요?

0

57

1

프록시 커넥션 객체를 반환할 때 생성하는건가요?

0

54

1

Transaction readOnly 성능 개선 (김영한님의 대한 감사인사)

2

178

2

JPQL 대신 네이티브 쿼리를 사용해야 하는 경우

0

77

1

@EventListener(ApplicationReadyEvent.class) 관련

0

88

1

트랜잭션 동기화 매니저와 데이터 소스

0

76

1

DB 관련 강의 개설 계획은 없으신건가요?

0

133

2

물리 트랜잭션 과 논리트랜잭션 용어를 맞게 이해한걸까요

0

94

1

스프링 3 버전 이상 rollbackFor 변경된듯요

1

112

1

트랜잭션 전파 질문.

0

87

1

프로젝트 오픈 에러

0

126

1

외부 트랜잭션에서 isNewTransaction이 false로 나오는거에 대해 질문드립니다

0

83

2

같은 스레드를 사용하면 트랜잭션 동기화 매니저는 같은 커넥션을 반환

0

72

1

h2 인메모리 테스트중 예약어 충돌날 경우 대처방법

0

102

1

커스텀aop와 트랜잭션을 같이 사용할때 우선순위에 관한 질문

0

98

2