DB에 datetime으로 넣은 값을 꺼낼 때, null을 반환하는 현상

세팅

  • DB: H2
  • SQL mapper: myBatis
  • Framework: Spring Boot

문제 현상

  • DB에는 글 작성 시간을 나타내는 property인 created_datetime에 값이 들어있는데,
  • DTO 역할을 하는 클래스에 글 작성시간을 나타내는 property가
    null을 반환하는 문제 발생(값을 가져오지 못함).

문제 원인

  • DB의 column과 Java 변수를 mapping 해주기 위해
    (DB는 snake_case인데, myBatis에서 return 받을 때 Camel Case로 받을 수 있도록 설정함)
    Spring Boot의 설정 파일인 application.yml에 아래의 설정을 했었다.
1
2
3
4
// application.yml
mybatis:
configuration:
map-underscore-to-camel-case: true
  • DB에는 작성시간의 변수명을 created_datetime으로 설정해두고,
    DTO 역할을 하는 클래스인 entity와 api에는 createDatetime이라고 주고 있었다.
    (d를 사이에 빼먹음)

DB에서 mapping되는 컬럼명이 없기 때문에 값을 가져오지 못해 null이 반환된 것이다.


해결 방법

    1. DTO 역할을 하는 클래스의 작성시간을 나타내는 변수의 타입을 Date로 주고,
      java.util.Dateimport 한다.
    1. 테이블을 생성하는 코드의 작성시간을 나타내는 컬럼명
      DTO역할의 entity, api클래스의 property명
      일치시켜 준다.