Anyway

[Mybatis] <trim> 동적 쿼리 사용하기 본문

Java/Spring

[Mybatis] <trim> 동적 쿼리 사용하기

dyana 2024. 8. 26. 10:09

[SQL <trim> 동적 쿼리 사용하기]

[<trim> 속성]

1. prefix 

: 실행될 쿼리의 <trim> 문 안에 쿼리 가장 앞에 붙여준다.

 

2. prefixOverrides

: 실행될 쿼리의 <trim> 문 안에 쿼리 가장 앞에 해당하는 문자들이 있으면 자동으로 지워준다. 

 

3. suffix

: 실행될 쿼리의 <trim> 문 안에 쿼리 가장 뒤에 붙여준다.

 

4. suffixOverrides

: 실행될 쿼리의 <trim> 문 안에 쿼리 가장 뒤에 해당하는 문자들이 있으면 자동으로 지워준다. 

 

 

[코드예시로 살펴보기]

이 코드는 sql 쿼리의 조건을 동적으로 생성하는 부분을 정의

 

1. <sql id="conditionPerson">

  • sql 조각을 정의하는데 사용한다. 
  • <sql> 태그 내부에 정의된 sql문은 재사용이 가능하다. 
    다른 sql 구문에서 <include> 태그를 사용하여 이 sql 조각을 포함시킬 수 있다. 
    ex) <include refid="conditionPerson(id)"></include>

 

2. <trim prefix="WHERE" prefixOverrides="AND|OR">

  • <trim> 태그는 sql 문을 조정하는데 사용한다.
    필요하지 않은 접두사나 접미사를 제거하거나, 특정 조건에 따라 추가적인 텍스트를 삽입할 때 유용하다. 
  • 'prefix="WHERE"'
    최종 SQL 쿼리에 "WHERE"이라는 접두사를 추가한다.
    다만 조건이 하나도 추가되지 않을 경우 삽입되지 않는다. 
  • 'prefixOverrides="AND|OR"'
    AND|OR로 시작하는 부분이 있으면 그 접두사를 제거한다.
    이는 쿼리의 첫 번째 조건 앞에 'AND' 또는 'OR' 을 붙지 않게 하기 위함이다.

3.  <if> 태그

  • <if> 태그는 조건에 따라 sql 구문의 일부를 포함할지 여부를 결정한다.
  • name이 비어있지 않다면 'AND name= #{name}' 이라는 조건이 sql 구문에 추가된다. 
  • <if test="age != 0">
    'age'가 0이 아닌 경우에 "AND age = #{age} '라는 조건이 추가되도록 한다. 

4. 'AND DELETED=false'

  • 항상 sql 구문에 포함
  • DELETE 컬럼 값이 false인 행만 선택되도록 제한 

[최종 동작 요약]

이 SQL 조각은 nameage라는 두 가지 파라미터에 따라 WHERE 절을 동적으로 생성한다.

  1. name이 비어 있지 않으면 AND name = #{name}이 추가된다.
  2. age가 0이 아니면 AND age = #{age}가 추가된다. 
  3. DELETED 컬럼이 false인 행만 선택된다.
  4. 최종적으로 SQL 구문에서 조건이 하나라도 추가되면 자동으로 "WHERE" 절이 포함된다.

 

'Java > Spring' 카테고리의 다른 글

[Spring] @RequestBody 사용하기  (0) 2024.08.28
[Spring] 정적 팩토리 메서드 패턴  (0) 2024.08.27
[Spring] @Builder 패턴 사용하기  (0) 2024.08.27
[Spring] @Configuration  (0) 2024.08.26
[Spring] @RequestMapping이란? - Annotation  (0) 2024.08.22