back/Mybatis,Ibatis

[Mybatis] like 조건시 문자열 처리

펭귄대장 2019. 2. 13. 19:19

Mybatis like 조건시 문자열 처리

 

 

특정 문자열을 포함한 값을 가져오는 쿼리는

select * from where title like '%대상문자열%'

과 같이 쿼리를 작성 및 사용하는데,

이를 mybatis 에서 사용시 like 뒷 부분을 어떻게 처리해야 할지 난해하다.
*
like '%#{key}%' 와 같이 작성시
아래와 같은 에러로그를 볼 수 있다.

19:16:37,814 INFO  [stdout] (default task-3) ### SQL: SELECT COUNT(*)      FROM banword     WHERE ban_word like '%?%'

 

19:16:37,814 INFO  [stdout] (default task-3) ### Cause: java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0).

19:16:37,814 INFO  [stdout] (default task-3) ; SQL []; Parameter index out of range (1 > number of parameters, which is 0).; nested exception is java.sql.SQLException: Parameter index out of range (1 > number of parameters, which is 0)., result_cd=0} | RESULT = fail | REMOTEADDR = 127.0.0.1 | PORT = 58841 | TIME = 350 ms

 

해결 :

 

[MySQL]
title like CONCAT('%',#{key},'%')

[Oracle]
title like '%' ||  #{key} || '%'

[MSSQL]
title like '%' + #{key} + '%' 


 

반응형