ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • "Mapper XML 파일 구문들" (insert, update, delete, select..)
    Spring 2023. 5. 23. 16:47

    동적 SQL 엘리먼트들을 살펴보기 전에 먼저 mapper에 있는 구문들을 확실히 해야 할 것 같아 정리해본다.

    마이바티스는 SQL을 작성하는데 집중하도록 만들어졌다고 한다.

     

    • cache -> 해당 네임스페이스를 위한 캐시 설정
    • cache-ref -> 다른 네임스페이스의 캐시 설정에 대한 참조
    • resultMap -> 데이터베이스 결과 데이터를 객체에 로드하는 방법을 정의하는 엘리먼트
    • parameterMap -> 비권장한다. 예전에 파라미터를 매핑하기 위해 사용되었으나 현재는 사용하지 않는다.
    • sql -> 다른 구문에서 재사용하기 위한 SQL 조각
    • insert -> 매핑된 INSERT 구문
    • update -> 매핑된 UPDATE 구문
    • delete -> 매핑된 DELETE 구문
    • select -> 매핑된 SELECT 구문

     

    각각에 대해 세부적으로 살펴보자.

     

     

     

    - select

    가장 흔히 사용되는 엘리먼트다. 

    데이터베이스에서 데이터를 가져온다. 조회하는 기능을 수행한다.

     

    --> 주어진 ID에 해당하는 개인정보를 선택하는 쿼리이다.

    주어진 id에 해당하는 개인정보를 "PERSON" 테이블에서 선택하여 'hashmap'으로 반환한다.

    이 구문의 이름은 selectPerson이고 int타입의 파라미터를 가진다. 

    그리고 결과 데이터는 HashMap에 저장된다.

    (hashmap은 키-값 쌍으로 데이터를 저장하는 자료구조이다.)

    (개인정보의 각 열은 'hashmap'의 키-값 쌍으로 매핑된다.)

    <select id="selectPerson" parameterType="int" resultType="hashmap">
    	SELECT * FROM PERSON WHERE ID = #{id}
    </select>

     

    --> select 엘리먼트 속성들

    • id - 구문을 찾기 위해 사용될 수 있는 네임스페이스 내 유일한 구분자
    • parameterType - 구문에 전달될 파라미터의 패키지 경로를 포함한 전체 클래스명이나 별칭
    • resultType - 이 구문에 의해 리턴되는 기대 타입의 패키지 경로를 포함한 전체 클래스명이나 별칭
    • resultMap - 외부 resultMap 의 참조명

    이 밖에도 요런 속성들이 있다...

     

     

     

     

    - insert, update, delete

    데이터를 변경하는 구문들이다.

    <insert id="insertAuthor">
      insert into Author (id,username,password,email,bio)
      values (#{id},#{username},#{password},#{email},#{bio})
    </insert>
    
    <update id="updateAuthor">
      update Author set
        username = #{username},
        password = #{password},
        email = #{email},
        bio = #{bio}
      where id = #{id}
    </update>
    
    <delete id="deleteAuthor">
      delete from Author where id = #{id}
    </delete>

     

    --> insert, update, delete 엘리먼트 속성들...

    <insert
      id="insertAuthor"
      parameterType="domain.blog.Author"
      flushCache="true"
      statementType="PREPARED"
      keyProperty=""
      keyColumn=""
      useGeneratedKeys=""
      timeout="20">
    
    <update
      id="updateAuthor"
      parameterType="domain.blog.Author"
      flushCache="true"
      statementType="PREPARED"
      timeout="20">
    
    <delete
      id="deleteAuthor"
      parameterType="domain.blog.Author"
      flushCache="true"
      statementType="PREPARED"
      timeout="20">

     

    --> insert는 key 생성과 같은 기능을 위해 몇가지 추가 속성과 하위 엘리먼트를 가진다.

     

    --> Author 테이블에 새 작성자를 삽입하는 쿼리다.

    -- useGeneratedKeys="true"는 자동 생성된 키를 사용하도록 설정한다.

    이 설정을 사용하면 새로 삽입된 레코드의 생성된 키 값을 가져올 수 있다.

    -- keyProperty="id"는 자동 생성된 키 값을 어떤 속성에 매핑할 것인지를 지정한다.

    이 경우엔 id 속성에 자동 생성된 키 값을 매핑한다.

    (자동 생성된 키란 데이터베이스에서 자동으로 생성되는 고유한 값이다.

    주로 데이터베이스의 데이블에 새로운 레코드를 삽입할 때 사용되며

    자동 생성된 키는 테이블의 기본키(PK)열에 해당되며 각 레코드를 고유하게 식별하는 역할을 한다.)

    (자동 생성된 키는 주로 정수 값이며 데이터베이스 시스템이 자체적으로 생성하거나 관리한다. 

    데이터베이스의 효율적인 관리와 데이터 무결성을 보장하는데 도움이 된다.)

    <insert id="insertAuthor" useGeneratedKeys="true"
        keyProperty="id">
      insert into Author (username,password,email,bio)
      values (#{username},#{password},#{email},#{bio})
    </insert>

     

     

    --> <foreach> 태그는 주어진 목록(collection)의 각 항목에 대해 반복 작업을 수행한다.

    • collection="list"는 "list"라는 파라미터에 전달된 목록을 나타낸다.
    • item="item"은 각 항목을 "item"이라는 변수에 할당한다.
    • separator=","는 각 삽입 구문 사이에 ","를 삽입하여 구분한다.
    <insert id="insertAuthor" useGeneratedKeys="true"
        keyProperty="id">
      insert into Author (username, password, email, bio) values
      <foreach item="item" collection="list" separator=",">
        (#{item.username}, #{item.password}, #{item.email}, #{item.bio})
      </foreach>
    </insert>

     

     

     

    --> <selectKey> 태그는 자동 생성된 키를 얻기 위한 서브쿼리를 정의한다.

    이 서브쿼리는 'SYSIBM.SYSDUMMY1' 시스템 테이블을 사용하여 랜덤한 6자리 숫자를 생성한다.

    그리고 이 값을 id라는 속성에 매핑하여 반환한다.

    • 'keyProperty="id"는 자동 생성된 키 값을 id 속성에 매핑한다.
    • resultType="int"는 자동 생성된 키의 데이터 타입을 int로 지정한다.
    • order="BEFORE"는 삽입 작업 전에 서브쿼리를 실행하도록 지정한다.

    favouriteSection,jdbcType=VARCHAR 는 'favouriteSection' 파라미터의 JDBC 데이터 타입을 

    명시적으로 VARCHAR로 지정한다.

    <insert id="insertAuthor">
      <selectKey keyProperty="id" resultType="int" order="BEFORE">
        select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
      </selectKey>
      insert into Author
        (id, username, password, email,bio, favourite_section)
      values
        (#{id}, #{username}, #{password}, #{email}, #{bio}, #{favouriteSection,jdbcType=VARCHAR})
    </insert>

     

     

    --> selectKey 엘리먼트는 다음처럼 설정 가능하다.

    <selectKey
      keyProperty="id"
      resultType="int"
      order="BEFORE"
      statementType="PREPARED">

     

     

    --> selectKey 엘리먼트 속성들..

Designed by Tistory.