쏘댕

MyBatis LIKE 검색 본문

공부/Java

MyBatis LIKE 검색

ssodang 2014. 5. 15. 22:17

 MyBatis 에서 sql xml 파일에 쿼리 작성 시 LIKE 검색 팁 


MyBatis에서 parameterClass의 속성을 SQL에 바인딩 할 때 syntax를  #{속성명} 으로 쓴다.


여기서 LIKE를 쓰려고


     SELECT *
     FROM user
     WHERE user_id LIKE '%#{test_game_id}%'



이렇게 하면,

     SELECT *
     FROM user
     WHERE user_id LIKE '%'test_game_id'%'


요렇게 쿼리가 가서 SQLException 발생!!


바인딩 될 때 MyBatis에서 따옴표를 붙여서 넘어오기 때문이라고 한다.



다음은 해결방법!


RDBMS에 제공하는 Built-In 함수를 사용하는 방법이 있다는데,


for Oracle:   WHERE GAME_ID LIKE '%' || #{gameId} || '%'


for MySQL :   WHERE GAME_ID LIKE CONCAT('%', #{gameId}, '%')




하지만 RDBMS 상관없이 LIKE를 실행하는 훨 간단한 것도 있대서 요걸썼다.


WHERE GAME_ID LIKE  '%${gameId}%'



MyBatis 뿐만 아니라 iBatis에서도 따옴표를 감싸지 않고 값을 Direct하게 받는 syntax는 ${속성명} 이다.



 참고 : 

MyBatis - LIKE



Comments