티스토리 뷰
반응형
동적 쿼리 (dynamic sql) : 자바에서 넘어오는 파라미터에 따라 sql 문의 형식이 변경되는 구조입니다.
쿼리를 전체적으로 보았을 때 자주 사용하는 부분은 where절 내이지만 from절에서도 사용 가능합니다.
이 경우 <if test="condition"></if> 로 감싸주는 데 주의해야 할 점이 있습니다.
1. null 체크
<if test='id neq null and id neq ""'>
and table_name.id = #{id}
</if>
<if test='id != null and id neq ""'>
and table_name.id = #{id}
</if>
<if test='id != null and !"".equals(id)'>
and table_name.id = #{id}
</if>
2. 문자 비교
<!-- 자바에서 id가 niyong인 경우 분기를 하는 경우입니다 -->
<if test=" 'niyong'.equals(id)">
and table_name.id = #{id}
</if>
3. 문자열 비교
<!-- equalsIgnoreCase -->
<if test=" 'niyong'.equalsIgnoreCase(id)">
and table_name.id = #{id}
</if>
<!-- == 연산자 사용 -->
<if test=" id == 'niyong'.toString()">
and table_name.id = #{id}
</if>
<!-- eq 사용 -->
<if test=" id eq 'niyong'.toString()">
and table_name.id = #{id}
</if>
아래는 사용해도 적용되지 않는 방법들입니다. 경우를 찾아보니 이런 경우에 왜 에러가 발생하는 지 찾을 수 있었습니다.
<!-- 1) 연산자를 사용한 객체는 자바에서도 허용 불가 -->
<if test='id == "niyong"'>
and table_name.id = #{id}
</if>
<!-- 2) String.equals(character) 로 취급 -->
<if test="id.equals('niyong')">
and table_name.id = #{id}
</if>
<!-- 3) java.lang.String 의 .equalsIgnoreCase 와 마찬가지로 위에서 id가 null이면
exception이 발생하므로 피연산자는 괄호() 안에 적어주어야 합니다. -->
<if test=' id.equalsIgnoreCase("niyong") '>
and table_name.id = #{id}
</if>
결론적으로 character 를 사용하는 케이스가 아니면 바깥쪽은 quote(') 로 감싸주고 안쪽에 비교하는 문자열은 double quote(") 로 감싸주어야 한다는 것을 알았습니다.
반응형
'Server' 카테고리의 다른 글
Timezone 설정 하기 (0) | 2021.05.03 |
---|---|
[Java] 작명 컨벤션 / Java Coding Standard (0) | 2021.04.12 |
[IntelliJ IDEA] 빌드한 프로그램의 war, jar 생성하기 (1) | 2021.04.07 |
Mybatis에서 다중 Insert문을 한번에 처리하기 (0) | 2021.04.07 |
[Java] 줄바꿈(\n) 개행문자열 치환 방법 (0) | 2021.04.06 |
[Node.js] 구동중인 서버 소스 동기화 시키기 (0) | 2021.02.08 |
댓글
공지사항