Mybatis로 동적SQL 처리하기

roon2020·2021년 3월 2일
0

spring

목록 보기
5/16
post-thumbnail

mybatis를 이용해서 게시물의 검색 기능을 구현해봅니다.

mybatis의 동적 SQL

mybatis는 동적 태그 기능이 있습니다.

  1. if
    test라는 속성이 true가 되었을 때 if tag안에 선언된 sql이 실행됩니다.
    if문 안의 표현식은 OGNL 표현식이라고 합니다. OGNL 참고 링크

    example

    <if test="type"=='T'.toString()">
     (title like '%'||#{search_keyword}||'%')
    </if>
  2. choose
    일반적인 프로그래밍에서 if,else if,else문입니다. switch문 으로 봐도 됩니다.
    when tag가 내부에 쓰입니다. when tag는 if와 동일하게 test 속성을 가지고 거의 같습니다.
    'else'는 otherwise tag에 해당합니다.

example

 <choose>
    <when test="type =='T'.toString()">
     title like '%'||#{keyword}||'%'
    </when> 
    <when test="type =='W'.toString()">
     writer like '%' ||#{keyword}||'%'
    </when>
    <when test="type =='C'.toString()">
     content like '%'||#{keyword}||'%'
    </when>
    <!-- <otherwise>
     title like '%'||#{keyword}||'%'
    </otherwise> -->
  </choose>
  1. trim,where,set
  • trim : prefix,suffix 등의 속성과 함께 쓰입니다. where절에서 sql 조건들을 연결해 줍니다.

    나머진 자세히 쓰진 않겠습니다..

  1. foreach
    반복문으로 조건을 붙여나갈 때 쓰일 수 있습니다.

    example

    <foreach item='type' collection="typeArr">
      <trim prefix="OR">
       <if test=~> sql1 </if>
       <if test=~> sql2 </if>
              ...
     </trim>
    </foreach>
  2. sql ,include
    sql태그를 이용해서 SQL문의 일부를 재사용할 수 있습니다.
    include 태그를 이용해서 sql태그에서 정의한 SQL문을 include해서 사용할 수 있습니다.

사용

크게 아래 4가지 부분을 신경써주면 됩니다.

  1. DTO 클래스
    검색 기준이 될 속성들을 만듭니다.
    "get+xml에서 사용할 객체 이름"으로 get메서드를 만듭니다.
  2. mapper xml
    여기서 sql문을 만듭니다.
    앞서 "mybatis의 동적 SQL"에서 기술한 것들을 가지고 SQL을 처리하는 로직을 작성합니다.
    DTO 클래스에서 "get+객체 이름"으로 이름지어진 메서드의 "객체 이름"이 DTO 객체가 됩니다. DTO 객체로 검색 기준들을 참조할 수 있습니다.
  3. test
    junit을 활용해서 동적으로 알맞은 sql을 생성하는지 로그를 확인합니다.
  • 테스트 코드
  • 로그
  1. view
    jsp에 form을 추가해서 get 요청을 할 수 있도록 작성해 봅니다. 검색이 되는지 확인합니다.
    그리고 view에서 많은 문제의 수정이 필요하지만 그 부분은 생략합니다.

profile
keep in positive mindset. I've got this.

0개의 댓글