본문 바로가기

DataBase

MyBatis 마이바티스에서 조건절 쿼리에 와일드 카드 넣기

- 쿼리에 넣고 싶은 조건절 -

't' 라는 테이블이 있고, 그 테이블 안에 'name'이라는 칼럼이 있다.
이 'name'이라는 칼럼 값에 'myName'이 들어가는 데이터를 모두 뽑고 싶다.
그러면 아래와 같은 조건절을 넣어야 한다.

where t.name = '%myName%'



- MyBatis에서 와일드카드 넣기 : 문제점 -

where t.name = '%myName%'

 

위와 같은 쿼리를 넣고 싶은데 어떻게 해야 하지?

일단 가장 먼저 생각난 방법은 아래였다.

where t.name = '%#{searchText}%' -- 틀린 문법

 

위처럼 하면 우리가 원하는 대로 작동하지 않는다.
MyBatis에서는 #{searchText} 자체에 앞뒤로 따옴표를 붙여주기 때문이다.
예를 들어서 searchText 변수 안에 들어 있는 값이 "myName" 이라고 하면 쿼리로 변환될 때는 아래처럼 돼 버린다.
where t.name = '%#{searchText}%' ----> where t.name = '%'myName'%'

 



 - MyBatis에서 와일드카드 넣기 : 해결방법 -

where t.name = '%myName%'

 

그럼 위처럼 조건절을 넣을 때는 어떻게 해야 할까?
생각을 조금 바꿔 보자.
'myName' 이라는 문자열 앞뒤로 '#'라는 문자열을 이어붙여 준다고 생각해 보자.
MyBatis에서 문자열을 어떻게 이어붙이더라..?

어렵게 생각하지 말고 db 내장 함수를 이용하면 편하다.
바로 CONCAT() 함수를 이용하는 것이다.
CONCAT ()함수는 문자열을 이어붙여서 반환해주는 함수다.
(concatenate : 사슬같이 잇다; 연쇄시키다;)

CONCAT('%', #{searchText}, '%') ---> where t.name = '%myName%'

 

- 220728

반응형