[Spring][국비교육] Day 87

Ga02·2023년 5월 3일

국비교육

목록 보기
75/82

➰ 마이바티스 DML 태그에서 사용하는 매개변수 값 불러오는 방법

<select>, <insert>, <update>, <delete> 태그에서 SQL 코드에 전달 파라미터를 적용하는 방법
기본 데이터타입은 변수에 담긴 값을 불러옴
참조형 타입은 getter에 해당하는 메소드를 호출
Map타입은 .get(매개변수명) 메소드를 호출
#{매개변수명 }
매개변수의 데이터타입을 판단해서 처리
문자열 타입 데이터라면 ''를 앞뒤로 붙여줌
숫자 타입 데이터라면 ''를 붙이지 않음
${매개변수명 }
매개변수의 데이터타입을 판단하지 않고 처리함
어떤 타입이든지 ''를 붙이지 않음

➰ 마이바티스에서 정의된 자바 데이터타입에 대한 키워드(별칭)

  • 매퍼XML에서 resultType이나 parameterType에서 특정 자바 데이터타입을 표현할 때 사용할 수 있도록 정의되어있는 키워드들임
  • org.apache.ibatis.type.TypeAliasRegistry 클래스에 명시되어있음
키워드자바타입
stringjava.lang.String
datejava.util.Date
mapjava.util.Map
hashmapjava.util.HashMap
listjava.util.List
arraylistjava.util.ArrayList
ResultSetjava.sql.ResultSet
intjava.lang.Integer(Wrapper 클래스)
integerjava.lang.Integer
_intint(기본 데이터타입)
_integerint
int[]Integer[]
_intint[]

✔ byte, short, long, float, double, boolean도 int와 같은 형태로 제공됨
_를 붙이면 기본 타입 / _를 안붙이면 참조형 타입

➰ 마이바티스 <sql>, <include> 태그

  • SQL 구문의 재사용성을 높이기 위해 Mapper XML에서 사용하는 태그
  • 반복적으로 사용되는 SQL 구문을 <sql>태그에 저장하여 사용
  • DML태그 또는 다른 <sql>태그에서 <include>태그를 이용하여 저장된 구문을 불러옴
  • <sql>태그를 <include>로 적용한 DML구문들이 다 함께 <sql>태그 구문에 영향을 받음
  • 한쪽 코드(기능)만 구문을 변경하려고하면 오히려 수정사항이 많아질 수 있음
    <sql>태그의 이름을 나타내는 id 속성은 반드시 작성해야 함

➰ CDATA태그, Character DATA

<![CDATA[
	태그 기호를 포함하는 텍스트
]]>
  • XML문서에서 태그 문법 기호(<, >, &)를 단순 문자로 사용하고 싶을 때 적용
  • 태그를 표현하는 기호를 마이바티스 매퍼 XML파일에서 SQL코드로 사용하면 XML문법으로 인식하는 경우가 있어 오류가 발생
  • CDATA태그를 이용하여 매퍼 태그 문법과 SQL문법을 분리시킬 수 있음

<selectKey>태그

  • 마이바티스 Mapper의 <insert> DML태그 안에서 사용하는 태그 👉🏻 <update>에서도 사용가능하지만 insert에서만 쓸 것
  • 주로 PK값을 생성할 때 사용
  • selectKey에서 생성된 PK값을 자바코드로 되돌려 줄 수 있음
  • 자동증가 생성키(Auto Increment 기능)를 제공하지 않는 데이터베이스에서 사용할 수 있도록 제공되는 태그 👉🏻 오라클 DB는 Auto Increment 기능이 없음

<selectKey> 태그의 속성

  • order
    • before : insert쿼리 수행 전에 selectKey가 동작
    • after : insert쿼리 수행 후에 selectKey가 동작
  • resultType
    • selectKey로 조회한 결과값의 데이터타입을 명시함
    • 자바타입으로 작성하면 됨
    • int | String
  • keyProperty
    • 조회 결과값을 저장할 프로퍼티명을 지정
    • parameterType에 지정된 DTO의 멤버 필드명을 작성
  • statementType
    • SQL 코드가 실행될 방식을 지정
    • Statement, Prepared, Callable 중 선택해서 작성 👉🏻 기본값은 Prepared (PreparedStatement)

🔍 쿼리 수행 태그

➰ DML 태그

  • <select>, <insert>, <update>, <delete>
  • 수행하려는 SQL쿼리에 맞게 태그를 골라 작성
  • SQL쿼리랑 태그 이름이 맞지 않아도 실행됨
    ➡ 맞춰서 작성하는 것이 좋음
    ➡ 사용할 수 있는 기능에 제약이 발생

➰ 공통 속성

  • id
    매퍼 파일(XML)에서 유일한 값으로 설정
    네임스페이스(namespace) 내에서 식별값으로 사용됨
    DAO인터페이스의 추상메소드 이름과 같은 이름으로 작성
  • parameterType
    SQL 쿼리를 수행할 때 필요한 파라미터(전달값)의 데이터타입
    마이바티스의 예약 키워드를 사용하려 적용함
    DTO 클래스는 패키지까지 포함한 풀네임으로 사용함
  • parameterMap 👉🏻 사용되지 않음
  • flushCache
    SQL 구문을 사용할 때마다 '2nd 레벨 캐시'를 지울지 설정함
    true로 지정하면 캐시를 삭제함 👉🏻 기본값 : false
  • timeout
    데이터베이스의 처리결과를 기다리는 최대 시간을 설정(초 단위로 숫자로 설정)
  • statementType
    SQL 쿼리를 수행하는 방식에 대한 설정
    Statement, Prepared, Callable 중 하나로 적용
    Prepared가 기본값
    Callable은 PL/SQL 사용할 때 적용

<select> 태그의 전용 속성

  • resultType
    • SELECT 쿼리의 수행결과(ResultSet)를 처리할 자바 데이터타입을 설정
    • 적용한 데이터타입으로 결과데이터를 변환함
    • DTO객체의 풀네임, 예약된 키워드로 데이터타입을 명시
    • TypeAlias를 적용할 수 있음
  • resultMap
    • <resultMap>태그를 이용하여 생성한 id속성값을 적용할 수 있음
    • resultType 속성을 대신하여 사용
  • useCache
    • SELECT 구문의 결과를 생성할 때 2nd 레벨 캐시에 적용할 것인지 설정 👉🏻 기본값은 true
  • fetchSize
    • SELECT 구문의 조회 결과를 한번에 가져올 크기를 설정함
      ✔ 대용량 조회 데이터가 필요하면 1,000개 정도를 설정하는 편
  • resultSetType
    • 조회 결과값을 읽어들이는 동작을 설정
    • DBMS의 SQL 커서(Cursor)의 동작 방식을 설정
    • FORWARD_ONLY : 커서가 앞쪽(다음 데이터)으로만 이동
    • SCROLL_INSENSITIVE : 커서가 뒤쪽(이전 데이터)으로도 이동
      • 데이터의 변화(변경)에 민감하지 않음
    • SCROLL_SENSITIVE : 커서가 뒤쪽(이전 데이터)으로도 이동
      • 데이터의 변화(변경)에 민감하게 반응
      • 조회 결과를 읽는 도중 이전 데이터의 변화가 발생하면 다시 돌아가서 갱신함
        ✔ 오라클 DBMS는 SCROLL_SENSITIVE를 허용하지 않음__

🔍 마이바티스의 내장 캐시(Cache)

2가지 내장 캐시를 사용
1. Local Session Cache (로컬 세션 캐시)
SqlSession 객체마다 가지고 있는 캐시
DBMS의 연결마다 하나씩 생성됨
✔ 개발자가 임의로 기능을 해제할 수 없음

  1. Second Level Cache (2nd 레벨 캐시)
    Mapper에 연결된 namespace마다 존재하는 캐시
    DAO마다 하나씩 연결되어 사용됨
    SQL 구문을 수행할 때마다 활용됨

🔍 마이바티스 동적 SQL 쿼리, Dynamic SQL

동적으로 변화되는 SQL쿼리를 작성할 수 있도록 지원하는 마이바티스 태그들

  • DML 수행태그 안에서 사용할 수 있음
  • <if>, <choose>, <trim>, <foreach> 태그가 제공됨

<if> 태그

test 속성을 이용하여 조건문을 적용
조건문 결과에 따라 SQL 구문의 추가 여부가 결정된
test 속성의 값을 연산결과가 "true" 또는 "false"가 되도록 작성

profile
IT꿈나무 댓츠미

0개의 댓글