Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- conponent
- mybatis
- WordPress
- wordpress블로그
- ansible
- string_agg()
- instance생성
- enum
- PostgreSQL
- Java
- 리스트중복제거
- 지옥같은git
- AWS
- anymatch메서드
- lightsail
- route53
- 3tierarchitecture
- port닫기
- 리스트중복값
- listnull
- 열려있는포트
- stereotypeannotation
- 권한정책
- awsconsole
- Spring
- Annotation
- 중복제거
- db
- 널포인터에러
- enumtype
Archives
- Today
- Total
Anyway
[DB] Mybatis에서 if문에 enum 비교값 사용하기 본문
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 |