mybatis if test 문자열처리
동적쿼리(dynamic sql)에서 많이 사용되는 Mybatis if test 에서의 문자열 처리.
※ java 문법과 동일하다고 보면 된다.
즉 문자열 비교를 위해 연산자 사용을 해선 안되고
equals 함수 사용시 null 값이 파라미터로 들어올 가능성을 대비하여 코딩해야 한다.
[Mybatis if test 에서의 문자열 처리]
1. null 체크
1 2 3 |
<if test = 'id neq null and id neq ""'> <if test = 'id != null and id neq ""'> <if test = 'id != null and !"".equals(id)'> |
cs |
TMI: IBATIS 에서는 ne 로 구분한다.
2. 문자 비교
java단에서 gender를 'M' 으로 저장시(Char)
1 | <if test=" 'M'.equals(gender) "> | cs |
java단에서 gender를 "F" 으로 저장시(String)
1 | <if test=' "F".equals(gender) '> | cs |
3. 문자열 비교
1) equalsIgnoreCase 사용
1 | <if test = '"pyo".equalsIgnoreCase(id)'> | cs |
2) == 연산자 사용
1 | <if test = "id == 'pyo'.toString()"> | cs |
3) eq 사용
1 | <if test = "id eq 'pyo'.toString()"> | cs |
[사용하지 말아야 할 문자열 비교 방법]
1 2 3 4 5 6 |
<!-- 1 --> <if test = 'id == "pyo"'> <!-- 2 --> <if test = "gender.equals('X')"> <!-- 3 --> <if test = 'id.equalsIgnoreCase("pyo")'> |
cs |
순서대로
1) 연산자를 사용한 참조객체의 비교는 에러 유발
2) String.equals(character) 로 취급하여 에러발생
3) java.lang.String 의 .equalsIgnoreCase 와 마찬가지로 위에서 id 가 null 인 경우 exception 발생하므로
와 같이 처리해야 한다.
결론:
character 를 사용하는 특별한 케이스를 제외하고
항상 가장 바깥쪽은 quote( ' ) 로 감싸고 안쪽 문자열은 double quote( " ) 로 감싼다
출처
https://sinpk.tistory.com/entry/Mybatis-if-%EB%AC%B8%EC%9E%90%EC%97%B4-%EB%B9%84%EA%B5%90https://developyo.tistory.com/242
'SPRING > MyBatis' 카테고리의 다른 글
MyBatis resultType vs resultMap 차이점 (0) | 2021.09.09 |
---|---|
MyBatis 에서 여러 파라미터 값 비교를 통한 조건문 (0) | 2021.09.07 |
Mybatis 에서의 Map, List, Map<List<Object>> 의 3가지 조회방법 (0) | 2021.09.07 |