본문 바로가기
개발공부/Spring

Mybatis 동적 쿼리(1)

by dokii 2020. 12. 31.
728x90
반응형

곧 작업하게될,

필터로 구분하여 리스트화면 뿌려주기.

를 위한 공부 여정이 시작됩니다.


 

동적쿼리란 ?

>

실행시에 쿼리문장이 만들어져 실해오디는 쿼리문을 말한다.  쿼리문이 변하냐 변하지않느냐에 따라 정적쿼리/동적쿼리가 된다.

동적쿼리를 사용할때에는 텍스트 문장으로 쿼리문을 가지고 있다가 실행할때마다 덱스트 쿼리문장을 바꿔서 실행하는 방식을 사용함.

검색이능이나 다중 입력 처리 등을 수행해야 할 겨우 sql을 실행하는 DAO를 여럴번 호출하여 실행하였지만 마이바디스에서는 이를 동적을 제어할수있는 구문을 제공하여 좀더 쉽게 쿼리를 구현할 수 잇도록 기능을 제공함.

 

 

언제 사용하면 좋을까?

>

1. 컴파일시에 sql문장을 확정할 수 없는 경우 : 동적쿼리가 가장많이 실행되는 시점은 실행 시점에 따라 where절에 조건이 달라질때다. 

2. PL/SQL 블록상에서 DDL문을 실행할 경우 : pl/sql의 익명블록이나, 함수, 프로시저, 패키지본문에서는 ddl문을 실행할수 없다. 하지만 동적sql을 사용하면 ddl문을 실행시킬수 있다.

3.PL/SQL블록 상에서 ALTER SYSTEM/SESSION명령어를 실행 해야하는 경우 : ddl문과 마찬가지로 동적 sql에서는 사용이 가능함.

 

 

동적쿼리 사용방법?

>

declare상에서 동적으로받을 변수를 먼저 생성한 후 생성한 변수를 활용해서 쿼리문을 작성한 후 execute immediate로 실행시켜 주면 됨.

BEGIN
EXECUTE IMMEDIATE '쿼리문 (선언한 변수활용)'
END;

 

기본문법

> and||or 뭐가먼저 들어올지모르는 매개변수 값에 where문을 쓰면됨.

<select id="id">

SELECT * FROM table

<where>
추가 SQL
</where>

</select>

 

동적쿼리 지원 구문

>

1.if

더보기

if구문

동적쿼리를 구현 할때 가장 기본적으로 사용되는 구문

특정 조건을 족할 경우 안의 구문을 쿼리에 포함시킴

필요로하는 조건이 1개 이상 일시 if구문을 여러개 사용할수 있음

ex)

<if test="조건식">

...

</if>

2.choose(when,otherwise)

더보기

choose구문

자바의 if-else 혹은switch, 오라클의 choose구문과 유사하며, 주어진 구문 중 한가지만 수행하고자 할 때 사용

3.trim

더보기

trim구문

쿼리 구문의 특정 부분을 없앨때 사용됨.

태크안의 내용이 완성될띠 처음 시작할 단어와 시작시 제거해야할 단어를 명시함.

ex)

<trim prefix="where" prefixOverrides="and|or">

...

</trim>

4.foreach

더보기

foreach구문

동적쿼리를 구현할때 collection에 대한 반복 처리를 제공함.

 

 

 

 

 

 

 

 

 

 

 

 

 


참고한 블로그.

[출처]coding-factory.tistory.com/457

[출처]hongcat-webstory.tistory.com/7

728x90
반응형

댓글