Anyway

[DB] Mybatis에서 if문에 enum 비교값 사용하기 본문

Database

[DB] Mybatis에서 if문에 enum 비교값 사용하기

dyana 2024. 12. 18. 15:27
public enum IssueType {
    A,
    B,
    C
}

 

클라이언트로부터 받아오는 enum 값에 따라 xml if문에 각각 다른 sql문을 쓰고 싶었다. (DB : postgresql)

 

 

첫 번째 작성한 코드 

            <if test="issueType.name() == 'A'">
                AND A = true
            </if>
            <if test="issueType.name() == 'B'">
                AND B = true
            </if>
            <if test="issueType.name() == 'C'">
                AND C = true
            </if>

 

 

클라이언트가 issueType을 null 값으로 주고 api를 날렸을 경우 에러가 난다. 

 

➡️ 에러 내용 NullPointerException

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.lang.NullPointerException: target is null for method name
### Cause: java.lang.NullPointerException: target is null for method name

 

issueType이 enum 객체일 때, name() 메서드는 enum 상수의 문자열의 이름을 반환한다. > 따라서 문자열로 비교 가능 

 

⚠️ 에러 발생 원인

여기서 클라이언트로부터 받는 issueType 값은 반드시 null 이 아니어야 한다. null일 경우 .name() 호출 시 NullPointerException이 발생한다. 

 

클라이언트로부터 null 값이 넘어올 수 있는 상황이 가능하기에 null 값도 허용해줄 수 있는 장치가 필요했다. 

 

두 번째 코드 

            <if test="@com.ddimtech.llmops.common.CommonComparator@isNotEmpty(issueType)">
                <if test="issueType.name() == 'A'">
                    AND A = true
                </if>
                <if test="issueType.name() == 'B'">
                    AND B = true
                </if>
                <if test="issueType.name() == 'C'">
                    AND C = true
                </if>
            </if>

 

잘 돌아가는 것 확인 ! 

 

 

 

 

'Database' 카테고리의 다른 글

[DB] postgresql Count 함수 사용하기  (0) 2024.12.19
[DB] Select문 STRING_AGG() 함수 사용하기  (0) 2024.10.04
[DB/JPA] ORM이란?  (0) 2024.08.22