ㅁ Mapper-Elements
1. mapper.xml에서 사용할 수 있는 element종류는 몇가지일까?
총 9 가지이며 종류로는 <cache>, <cache-ref>, <resultMap>, <parameter>, <sql>, <select>, <insert>, <update>, <delete> 가 있다.
1.1 <cache>
cache와 cache-ref 엘리먼트는 캐시를 설정하는 엘리먼트이다. cache는 현재 namespace에 대한 캐시 설정이고, cache-ref는 다른 namespace에 대한 캐시 설정 참조를 할 때 사용한다
1.1.1 캐시란 무엇이고 목적은 무엇일까?
컴퓨터 과학에서데이터나 값을 미리 복사해놓은 임시 장소를 가리킨다.
캐시 접근 시간에 비해 원래 데이터를 접근하는 시간이 오래 걸리는 경우나, 값을 다시 계산하는 시간을 절약하기 위해 사용한다.
캐시에 데이터를 미리 복사해 놓으면, 계산이나 접근 시간 없이 더 빠른 속도로 데이터에 접근 할 수 있다. 목적은 속도를 빠르게하기위함이다.
1.1.2 cache defalut설정 값
1. 매퍼xml의 모든 select 구문의 결과를 캐시한다.
2. 매퍼xml의 insert, update, delete는 모두 캐시를 지운다.
3. 가장 오랫동안 사용하지 않은 캐시를 지우는 알고리즘 (LRU - Least Recently Used)을 사용한다.
4. 어플리케이션이 실행하는 동안 캐시를 유지한다. 특정 시점에 사라지거나 하지 않는다. 5. 캐시는 최대 1024개 까지 저장한다.
6. 캐시는 읽기/쓰기 모두 가능하다.
1.2 <resultMap>
1.2.1 resultMap이란?
데이터 베이스 결과 데이터를 객체에 로드하는 방법을 정의하는 엘리먼트이다.
resultMap엘리먼트는 마이바티스에서 가장 중요하고 강력한 엘리먼트이다.
resultSet에서 데이터를 가져올 때 작성되는 JDBC 코드의 대부분을줄여주는 역할을 담당한다.
1.2.2 resultMap의 특징
resulMap 엘리먼트는 4가지 속성을 설정 할 수 있다.
1. id : 매핑 구문에서 결과 매핑을 사용할 때 구분하기 위한 아이다.
2. type : 결과 매핑을 적용하는 대상 객체 타입(매핑 구문의 결과 데이터를 거장할 자바 타입을 지정함)
3. extends : 자바의 상속처럼 기존의 정의된 매핑결과를 상속받아 추가적인 매핑 정보로 확장 할 때 사용한다 ( 부모 resultMap 아이디사용)
4. autoMapping : 결과 매핑을 자동 매핑할 것인지 설정한다.
< resultMap에서 필수적으로 작성해야할 것은 id와 type이다 >
1.2.3 resultMap 상속이 가능하며 extends 사용할 때는 부모쪽에 id를 가져온 후 추가적인 속성만 작성하면 된다.
1.3 <sql>
sql 사용법
각 매핑구문에서 공통으로 사용할 수 있는 sql 문자열 일부를 정의하고 재사용하기 위해서 사용한다.
<sql id값을 설정한 후 조회하고싶은 쿼리를 작성한 후에 select문에는 <include refid =(sql id값)>을 넣어준다.
1.4 <discriminiator>
마이바티스 설정에서는 resultMap혹은 resultType 매핑 한개만 선택할 수 있다.
즉, 매핑 구문 아이디 별 결과 매핑은 고정되어 있는 상태이다.
하지만 개발하다보면 매핑 구문은 동일하지만 동적으로 결과를 매핑해야하는 상황이 생길 수 있다.
이러한 경우 discriminator 엘리먼트를 이용하면 매핑과정에서 동적으로 결과를 매핑해주는기능을 제공한다.
1.5 <insert>
insert, update, delete 앨리먼트는 사용하는 속성이 대부분 동일하지만 insert 앨리먼트는는 좀 더 많은 속성을 정의할 수 있음. insert와 update와 delete는 공통적인속성을 가지고 있다. 아래와 같다.
1.
id : 매핑을 구분하는 아이디이다
2.
parameterType : 파라미터 타입을 지정한다, 이미정의된 별칭을 사용할 수 있거나 클래스의 full-name을 적어줘야한다.
3.
flushCache : 매핑 구문을 실행 할 때 캐시를 지울지 여부를 설정한다
4.
timeout : sql을 실행 후 응답을 기다리는 최대시간이며 대게는 드라이버 자체 타임아웃값을 사용한다
5.
statementType : JDBC 구문타입을 지정한다 STATEMENT, PREPARED, CALLABLE중 하나를 쓸 수 있으며 기본 값은 PREPARED이다.
1.5.1 <insert> 추가속성
useGeneraterKeys : 생성 키 값을 만들기위해 JDBC의 getGeneraterKeys메소드를 호출할 것인지를 결정하면 기본값은 false이다.
keyProperty : insert 구문의 하위엘리먼트인 selectKey 엘리먼트에 의한 반환값을 설정할 프로퍼티를 지정 keyColumn : 생성 키를 가진 테이블의 컬럼명을 설정한다. (키 컬럼이 테이블의 첫번째 행이 아닌 데이터 베이스에서만 필요하다. - postgreSQL제외)
1.6 <select>
1.6.1 <select>에서 자주 사용되는 속성
1. id : 매핑 구문을 구분하는 아이디이다.
2. parameterType : 파라미터의 타입을 의미한다. 이미정의된 타입을 사용할 수 있으며, 개발자가 정의한 타입을 사용하는 경우 full-name을 기술한다.
3. resultType : 매핑 구분의 결과 행 타입이다. 전체 결과의 타입을 지정하는 것이 아닌 1row 에 해당하는 타입을 설정해야한다.
4. resultMap : 매핑 구문의 결과 행을 미리 선언한 resultMap을 이용한다는 의미이다. 전체 행이 아닌 1 row에 해당하는 resultMap을 지정한다.
1.6.2<select>에서 자주 사용되지 않는 속성
1. flushCache : 구문을 호출 할 때 마다 캐시를 지울지 여부를 설정한다.
2. useCache : 구문의 결과를 캐시한다. 기본값 true
3.timeout : 구문을 실행하고 응답을 기다리치는 최대시간이다. 대게는 설정하지 않고 JDBC 드라이버의 타임아웃 값을 그대로 사용한다.
4. fetchSize : 지정된 수만큼의 결과를 반환하게 하는 드라이버 힌트 형태의 값이다. 디폴트는 설정하지않는 것이며 일부 드라이버는 지원하지 않는다.
5. statementType : JDBC의 구문 타입을 지정한다. STATEMENT,PREPARED,CALLABLE중 하나이며 디폴트는 PREPARED이다.
6.resultSetType : ResultSet의 커서 이동방향을 의미한다. FORWARD_ONLY,SCROLL_SENSITIVE, SCROLL_INSENSITIVE 중 하나를 설정한다.
기본값은 FORWARD_ONLY이며, 커서가 앞으로만 이동한다.
SCROLL_SENSITIVE는 커서가 앞뒬 이동할 수 있고 ResultSet객체 생성 후 추가 및 삭제된 데이터도 볼수 있다.
SCROLL_INSENSITIVE는 커서가 앞뒤로 이동할 수 있지만 ResultSet 객체 생성 후 추가 및 삭제된 데이터는 볼 수 없다