- 쿼리에 넣고 싶은 조건절 -
'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
반응형
'DataBase' 카테고리의 다른 글
[PostgreSQL] 파일 이름이 콤마(,)를 기준으로 두 개로 나뉘는 문제 (0) | 2022.07.27 |
---|---|
[SQL] inner join 을 써야 할 때와 left join 을 써야 할 때 / 차이 (0) | 2022.04.18 |
sql 날짜 비교 where 절 조건 넣을 때 주의할 점 (0) | 2022.04.17 |
참조하는 테이블에서 하위 항목이 몇 건인지 출력하는 법 (0) | 2022.04.17 |
가장 최근에 insert한 row의 pk 값 받아오기 (테이블을 참조해야 할 때) (0) | 2022.04.13 |