[MyBatis] RDB MyBatis란? 기본 설정 및 동적 쿼리

728x90
반응형
SMALL

MyBatis

객체지향 언어인 JAVA와 SQL Based인 관계형 데이터베이스(RDBMS) 프로그래밍을 쉽게 처리하기 위한 Persistence Framework의 일종이다.

장점

사용이 간단하고, 생산성이 높다.

  • 쿼리의 재사용과 코드의 분리가 수월하다.
  • 유지보수에 용이하다.
  • 복잡한 쿼리나 다이나믹 쿼리에 강하다.
  • resultType, resultClass 등 VO가 아닌, 사용자가 정의한 DTO, MAP 등으로 맵핑하여 사용할 수 있다.

기본 설정

Maven 사용 시 pom.xml에 MyBatis Dependency 설정이 필요하다.

    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.3.2</version>
    </dependency>

개별 설정파일에 Property 설정 분리, 커넥션 풀 사용 설정이 필요하다

    <properties resource="mybatis/config.properties">
        <property name="username" value="honggildong"/>
        <property name="password" value="1q2w3e"/>
    </properties>

    <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
    </datasource>

 

Mapper.xml 구성

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="QnaRepository">
        <select id="selectQnaList" parameterType="java.lang.String" resultType="com.project.qna.dto.QnaGetDto.class">
            SELECT
                   qna_no,
                   qna_type_no,
                   qna_title,
                   qna_comment,
                   reg_id,
                   reg_Dt,
                   chg_id,
                   chg_dt
              FROM qna
             WHERE qna_no = #{qnaNo}
        </select>
    </mapper>

 

동적 SQL 처리

trim, if

    <select id="selectQnaList" parameterType="java.lang.String" resultType="com.project.qna.dto.QnaGetDto.class">
            SELECT
                   qna_no,
                   qna_type_no,
                   qna_title,
                   qna_comment,
                   reg_id,
                   reg_Dt,
                   chg_id,
                   chg_dt
              FROM qna
              <trim prefix="WHERE" prefixOverrides="AND | OR">
                  <if test="qnaNo != null and qnaNo != ''">
                      AND qna_no = #{qnaNo}
                  </if>
                  <if test="qnaTypeNo != null and qnaTypeNo != ''">
                      AND qna_type_no = #{qnaTypeNo}
                  </if>
              </trim>
             ORDER BY qna_no
        </select>
    <update  id="updateQna" parameterType="java.lang.Long">
        UPDATE qna
        <trim prefix="SET" suffixOverrides=",">
            <if test="qnaTypeNo != null and qnaTypeNo != ''">
                qna_type_no = #{qnaTypeNo},
            </if>
            <if test="qnaTitle != null and qnaTitle != ''">
                qna_title = #{qnaTitle},
            </if>
            <if test="qna_comment != null and qna_comment != ''">
                qna_comment = #{qna_comment},
            </if>
        </trim>
         WHERE qna_no = #{qnaNo}
    </update>

 

 

choose, when, oterwise

    <select id="selectQnaList" parameterType="java.lang.String" resultType="com.project.qna.dto.QnaGetDto.class">
            SELECT
                   qna_no,
                   qna_type_no,
                   qna_title,
                   qna_comment,
                   use_yn,
                   reg_id,
                   reg_Dt,
                   chg_id,
                   chg_dt
              FROM qna
             WHERE reg_dt BETWEEN '20190101' AND '20190501'
             <when test="qnaNo != null and qnaNo !=''">
                 AND qna_no = #{qnaNo}
             </when>
             <when test="qnaTypeNo != null and qnaTypeNo !=''">
                 AND qna_type_no = #{qnaTypeNo}
             </when>
             <oterwise>
                 AND use_yn = 'Y'
             </oterwise>
             ORDER BY qna_no
        </select>

 

foreach

    <update id="deleteFile" parameterType="java.lang.Long">
        UPDATE qna_file
           SET use_yn = 'N'
         WHERE qna_no = #{qnaNo}
           AND file_no NOT IN
         <foreach item="item" index="index" collection="list" open="(" separator="," close=")">
         #{item}
         </foreach>
    </update>

 

자료참고

728x90
반응형
LIST