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} + '%' 


 

반응형

'back > Mybatis,Ibatis' 카테고리의 다른 글

[mybatis] xml에서 java method 사용  (0) 2020.08.24
[Mybatis] 동적쿼리 (if test) 문자열처리  (4) 2020.03.27
[Ibatis] dtd 경로 문제  (1) 2019.12.30
[Mybatis] $과 # 차이  (0) 2019.12.05

+ Recent posts