전체/Spring Boot

mybatis에서 enum type handler 사용하기

effortDev 2021. 3. 7. 21:23

model에 enum type을 넣고 

mybatis에서 아래 테이블의 data를 받아오려고 한다.

 

 

enum은 여러 형태를 가질 수 있다.

 

아래와 같이 그냥 단건의 데이터만 지정하여 만드는 경우가 있을 수 있고

 

 

db에 쌓이는 데이터유형이 숫자( 1_VERSION, 2_VERSION )

특수문자로 시작할 경우 enum을 아래와 같이 인자를 2개씩 갖게 지정될 수 있다.

 

 

 

그럴경우 여러 형태의 enum 데이터를 바인딩 하지 못해

아래와 같은 오류가 발생 할 수 있다.

 

Caused by: org.apache.ibatis.executor.result.ResultMapException: Error attempting to get column '' from result set.

Caused by: java.lang.IllegalArgumentException: No enum constant

 

 

 

위소스를 보면 상품정보 rest controller에서 service를 거쳐 mapper에 해당하는 쿼리결과를 lists 객체에

담겨야 하는데 데이터를 못받아와 catch절 NOT_FOUND로 빠져  

swagger에서해당 data를 알지 못해 못받아오는 경우도 생긴다.

 

 

 

이럴경우 TypeHandler를 생성하여 해결할 수 있다.

 

 

 

 

그리고 생성한 type handler 위치의 패키지명을 아래와 같이 지정해준다.

type-handlers-package: com.shlee.toy1.common.handler.type

 

 

 

그리고 api를 조회해보면 아래와 같이 enum으로 정의한 키값으로 나온다.

 

 

 

이제 이 반환된 키 값으로 서비스 로직에서 데이터를 가공해서 반환해주면 된다.

 

 

 

 

이제 여러개의 enum type에 대응가능한 mybatis type handler에 대해 작성할 수 있게 되었다.