학습 목표
- 카멜 ↔ 스네이크 함정 의 핵심 개념을 안다
- 이름 규칙의 차이 의 동작을 안다
- null 이 되는 함정을 만나면 어디를 의심할지 안다.
1. 문제
"분명히 SELECT 했는데 객체에 데이터가 안 들어와요. 모두 null 이에요!"
2. 새 도구
이름 규칙의 차이: DB 는 user_id (스네이크), 자바는 userId (카멜). 둘이 자동으로는 매핑 안 됨.
3. 코드
-- DB (일반 예시)
CREATE TABLE sample (
user_id VARCHAR(50), -- 스네이크
created_at TIMESTAMP
);
// 자바 VO
public class Sample {
private String userId; // 카멜
private LocalDateTime createdAt;
}
-- 결과: SELECT 해도 userId, createdAt 이 null
// 해법 1: AS 로 매핑
SELECT user_id AS userId, created_at AS createdAt FROM sample
// 해법 2: 글로벌 설정 (권장)
<!-- mybatis-config.xml -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
4. 정리
- DB 스네이크 vs 자바 카멜 불일치 = null
- 해법 1: SELECT ... AS ... (수동)
- 해법 2: mapUnderscoreToCamelCase=true (전역, 권장)
5. Before / After
전 차시
"분명히 SELECT 했는데 객체에 데이터가 안 들어와요. 모두 null 이에요!"
이번 차시
null 이 되는 함정을 만나면 어디를 의심할지 안다.
학습 확인 체크리스트
- DB 스네이크 vs 자바 카멜 불일치 = null
- 해법 1: SELECT ... AS ... (수동)
- 해법 2: mapUnderscoreToCamelCase=true (전역, 권장)