곧 작업하게될,
필터로 구분하여 리스트화면 뿌려주기.
를 위한 공부 여정이 시작됩니다.
동적쿼리란 ?
>
실행시에 쿼리문장이 만들어져 실해오디는 쿼리문을 말한다. 쿼리문이 변하냐 변하지않느냐에 따라 정적쿼리/동적쿼리가 된다.
동적쿼리를 사용할때에는 텍스트 문장으로 쿼리문을 가지고 있다가 실행할때마다 덱스트 쿼리문장을 바꿔서 실행하는 방식을 사용함.
검색이능이나 다중 입력 처리 등을 수행해야 할 겨우 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에 대한 반복 처리를 제공함.
참고한 블로그.
'개발공부 > Spring' 카테고리의 다른 글
[스프링] Mybatis Mapper 관련 링크 공유 (0) | 2021.02.26 |
---|---|
[스프링] 어노테이션 @RequestMapping @ReqeustBody @ResponseBody (0) | 2021.02.22 |
의존성 주입(Dependency Injection, DI) (0) | 2021.01.03 |
Mybatis(2) (1) | 2021.01.02 |
Mybatis (1) (0) | 2021.01.01 |
댓글