[SPRING] JPA - Converter

RuiN·2022년 8월 6일
0

Spring

목록 보기
5/8
post-thumbnail

Converter

컨버터를 사용하면 Entity의 Data를 변환해서 DB에 저장할 수 있습니다.

ENUM 이나 Boolean 값에 따라 0 이나 1 대신 Y 또는 N을 저장하고 싶다면 Converter를 사용하면됩니다.


Status

@Data
public class BookStatus {
    private int code;
    private String description;

    public BookStatus(int code) {
        this.code = code;
        this.description = parseDescription(code);
    }

    private String parseDescription(int code) {
        switch (code) {
            case 100:
                return "판매종료";
            case 200:
                return "판매중";
            case 300:
                return "판매보류";
            default:
                return "미지원";
        }
    }

    public boolean isDisplayed() {
        return code == 200;
    }
}

위와 같이 BookStatus라는 현재 책의 판매 상태를 나타내는 클래스를 생성합니다.
(Getter 와 Setter를 사용하기 위해 @DATA 어노테이션 사용)


Converter class

@Converter
public class BookStatusConverter implements AttributeConverter<BookStatus, Integer> {

    @Override
    public Integer convertToDatabaseColumn(BookStatus attribute) {
        return null;
    }

    @Override
    public BookStatus convertToEntityAttribute(Integer dbData) {
        return null;
    }
}

먼저 converter를 사용할 수 있도록 BookStatusConverter라는 클래스를 만든후
AttributeConverter<BookStatus, Integer> 를 implements 한후
convertToDatabaseColumn 와 convertToEntityAttribute 메소드를 정의 해 주어야 합니다.

    @Override
    public Integer convertToDatabaseColumn(BookStatus attribute) {
        return attribute.getCode();
    }

    @Override
    public BookStatus convertToEntityAttribute(Integer dbData) {
        return dbData != null ? new BookStatus(dbData) : null;
    }

@Converter 어노테이션과 함께
위와 같은 로직으로 작성해줍니다.

그 이후에 Converter를 적용할 컬럼에

    @Convert(converter = BookStatusConverter.class)
  private BookStatus status; // 판매상태

@Convert 어노테이션과 Converter 클래스를 적용시켜줍니다.


Result

  @DisplayName("1. converterTest")
  @Test
  void test_5(){

      bookRepository.findAll().forEach(System.out::println);
  }

위와 같은 Test생성하고 실행시키면

status=BookStatus(code=100, description=판매종료)
status=BookStatus(code=200, description=판매중)

위의 결과로 결과가 저장 되어지는것을 확인 할 수 있습니다.

profile
어디까지 올라갈지 궁금한 하루

0개의 댓글