Mybatis에서 Oracle과 Java의 일반적인 데이터 타입 매핑

2025. 1. 24. 07:10·개발/Mybatis

 

Oracle 데이터 타입 Java 데이터 타입 MyBatis Type Alias 비고
CHAR, VARCHAR2, NCHAR, NVARCHAR2 java.lang.String string 문자열
LONG java.lang.String string 매우 긴 문자열
NUMBER java.math.BigDecimal bigdecimal
정밀한 숫자, 금융 계산에 적합
NUMBER(p) java.lang.Integer int
p (정밀도)가 10 이하인 경우
NUMBER(p) java.lang.Long long
p (정밀도)가 10 초과 19 이하인 경우
NUMBER(p,s) java.lang.Double double
부동 소수점 숫자
FLOAT java.lang.Double double
부동 소수점 숫자
INTEGER, INT java.lang.Integer int 정수
SMALLINT java.lang.Short short 정수
DATE java.util.Date date 날짜 및 시간
TIMESTAMP java.sql.Timestamp timestamp
날짜 및 시간 (밀리초 정밀도)
TIMESTAMP WITH TIME ZONE java.sql.Timestamp timestamp
타임존 정보를 포함한 날짜 및 시간
BLOB byte[] byte[] 바이너리 데이터
CLOB java.lang.String string
대용량 텍스트 데이터
NCLOB java.lang.String string
대용량 유니코드 텍스트 데이터
RAW byte[] byte[]
원시 바이너리 데이터
BOOLEAN java.lang.Boolean boolean
논리값 (true/false) - Oracle 12c부터 지원, 이전 버전은 CHAR(1) 또는 NUMBER(1) 사용

매핑 설계 시 고려 사항:

  1. 데이터 정밀도:
    • Oracle의 NUMBER 타입은 매우 넓은 범위의 숫자와 정밀도를 표현할 수 있다. Java의 int, long, double로 모든 NUMBER 타입을 정확하게 표현하지 못할 수 있으므로, 정밀한 숫자 계산이 필요한 경우 java.math.BigDecimal을 사용하는 것이 좋다.
  2. 날짜 및 시간:
    • Oracle의 DATE 타입은 년, 월, 일, 시, 분, 초 정보를 저장한다. Java의 java.util.Date와 매핑하는 것이 일반적이다.
    • 밀리초 단위의 정밀도가 필요한 경우 TIMESTAMP를 사용하고 java.sql.Timestamp와 매핑한다.
    • 타임존 정보를 다루어야 하는 경우 TIMESTAMP WITH TIME ZONE을 사용하고, java.sql.Timestamp 또는 java.time.OffsetDateTime (Java 8 이상)과 매핑할 수 있다.
  3. 대용량 데이터:
    • CLOB, NCLOB과 같은 대용량 텍스트 데이터는 java.lang.String으로 매핑할 수 있지만, 메모리 문제가 발생할 수 있다. java.io.Reader 또는 java.io.InputStream으로 처리하는 것이 더 효율적일 수 있다.
    • BLOB과 같은 대용량 바이너리 데이터는 byte[]로 매핑할 수 있지만, 메모리 문제가 발생할 수 있다. java.io.InputStream으로 처리하는 것이 더 효율적일 수 있다.
  4. 사용자 정의 타입:
    • Oracle의 객체 타입이나 컬렉션 타입과 같은 사용자 정의 타입을 사용하는 경우, TypeHandler를 직접 구현하여 매핑을 정의해야 한다.
  5. NULL 처리:
    • Oracle의 NULL 값은 Java의 null과 매핑된다. null 값을 적절히 처리해야 한다.
    • 예를 들어 오라클에서 숫자 타입(NUMBER, INTEGER, FLOAT 등) 컬럼이 NULL 값일 때, MyBatis를 통해 Java의 int 타입 필드로 가져오면 null을 int로 변환할 수 없기 때문에 예외가 발생한다.
      ( org.apache.ibatis.exceptions.TypeException)
    • ->  Java 필드를 Integer와 같은 Wrapper 클래스로 변경
    • ->  SQL 쿼리에서 NVL 또는 COALESCE 사용
 
 
저작자표시 비영리 변경금지 (새창열림)

'개발 > Mybatis' 카테고리의 다른 글

Mybatis resultMap 사용법  (0) 2025.01.24
Mybatis에서 TypeHandler 사용하기  (0) 2025.01.24
Mybatis란?  (0) 2025.01.24
'개발/Mybatis' 카테고리의 다른 글
  • Mybatis resultMap 사용법
  • Mybatis에서 TypeHandler 사용하기
  • Mybatis란?
함수형 인간
함수형 인간
잘 까먹는 개발자의 두뇌 확장 장치
  • 함수형 인간
    개발 기록 노트
    함수형 인간
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 글 목록 (84)
      • 기타 (1)
      • 개발 (82)
        • Java (6)
        • Javascript (1)
        • Spring (20)
        • jQuery (0)
        • Git (0)
        • servlet (11)
        • JSP (6)
        • HTML (0)
        • CSS (10)
        • SQL (9)
        • JSTL (3)
        • Mybatis (4)
        • Design Patterns (0)
        • HTTP (2)
        • Devtools (0)
        • IntelliJ (5)
        • JDBC (1)
        • Lombok (3)
        • Logging (1)
      • 책 리뷰 (0)
  • hELLO· Designed By정상우.v4.10.3
함수형 인간
Mybatis에서 Oracle과 Java의 일반적인 데이터 타입 매핑
상단으로

티스토리툴바