본문 바로가기

JAVA

Database에 따른 동적 쿼리 차이

기존에 H2 를 사용하던 프로젝트의 Database를 Mysql로 변경하려고 하는데 검색이 되지 않는 문제가 발생했다.

H2는 문법적으로 ORACLE과 유사한 점이 많지만 Mysql과는 호환되지 않는 부분이 꽤 많다.

결과적으로 문법의 차이 때문에 발생한 일이다.

 

 

H2와 ORACLE은 동적쿼리문을 아래와 같이 사용한다.

SELECT * FROM TABLE_NAME WHERE 1 = 1
<if test="searchCondition == 'CONDITION_NAME'">
	AND CONDITION_NAME LIKE '%'||#{searchKeyword}||'%'
</if>

 

반면 Mysql은 CONCAT 문을 사용한다.

SELECT * FROM BOARD_NAME WHERE 1 = 1
<if test="searchCondition == 'CONDITION_NAME'">
	AND CONDITION_NAME LIKE CONCAT('%', #{searchKeyword}, '%')
</if>

 

아래와 같이 수정한 후 동작시켜보니 모든 기능이 정상적으로 잘 작동하는 것을 확인했다.