Contents
MyBatis - Mapper XML 파일
   May 23, 2023     3 min read

Mapper XML 파일

✅서론

마이바티스의 가장 큰 장점은 매핑구문이다.

매핑구문을 이용하면 SQL Map XML 파일은 상대적으로 간단하다.

동일한 기능을 가진 JDBC 코드와 비교하면 엄청 많이 코드가 간결해진다. 공식문서에서는 95%까지 줄인다는 말이 있을 정도이다.


✅select

  • select 구문은 데이터베이스에서 데이터를 가져온다.
  • 보통 데이터를 조회하는 기능에 많이 쓰인다 → 마이바티스는 데이터를 조회하고 그 결과를 매핑하는데 집중하고 있다.
<select id="selectPerson" parameterType="int" resultType="hashmap">
	  SELECT * FROM PERSON WHERE ID = #{id}
</select>

위 코드를 설명하면

  • id = "selectPerson": 구문의 이름
  • parameterType = “int” : int 타입의 파라미터를 가짐.
  • resultType = “HashMap” : HashMap에 저장된다.
  • #{id} : 이 표기법은 마이바티스에게 PreparedStatement 파라미터를 만들도록 지시한다.
    • 반면에 JDBC에서는 PreparedStatement에는 “?” 형태로 파라미터가 전달되었다.
String selectPerson = "SELECT * FROM PERSON WHERE ID=?";
PreparedStatement ps = conn.prepareStatement(selectPerson);
ps.setInt(1,id);

➡️select 엘리먼트 속성들

<select
  id="selectPerson"
  parameterType="int"
  parameterMap="deprecated"
  resultType="hashmap"
  resultMap="personResultMap"
  flushCache="false"
  useCache="true"
  timeout="10"
  fetchSize="256"
  statementType="PREPARED"
  resultSetType="FORWARD_ONLY">

속성설명 
id구문을 찾기 위해 사용될 수 있는 네임스페이스내 유일한 구분자 
parameterType구문에 전달될 파라미터의 패키지 경로를 포함한 전체 클래스명이나 별칭 
resultTyperesultType에 의해 리턴되는 기대타입의 패키지 경로를 포함한 전체 클래스명이나 별칭. collection인 경우 collection 타입 자체가 아닌 collection이 포함된 타입이 될 수 있다. resultType이나 resultMap을 사용하라. 
resultMap외부 resultMap의 참조명. 결과맵은 마이바티스의 가장 강력한 기능이다. resultType이나 resultMap을 사용하라. 
flushCache이 값을 true로 셋팅하면 구문이 호출될 때마다 로컬, 2nd 레벨 캐시가 지워질 것이다.(flush). 디폴트 값은 false이다. 
userCache이 값을 true 로 셋팅하면 구문의 결과가 2nd 레벨 캐시에 캐시 될 것이다. 디폴트는 true이다. 
timeout예외가 던져지기 전에 데이터베이스의 요청 결과를 기다리는 최대시간을 설정한다. 디폴트는 셋팅하지 않는 것이고 드라이버에 따라 다소 지원이 되지 않을 수 있다. 
fetchSize지정된 수만큼의 결과를 리턴하도록 하는 드라이버 힌트 형태의 값이다. 디폴트는 셋팅하지 않는 것이고 드라이버에 따라 다소 지원되지 않을 수 있다. 
statementTypeSTATEMENT, PREPARED 또는 CALLABLE 중 하나를 선택할 수 있다. 마이바티스에게 Statement, PreparedStatement 또는 CallableStatement를 사용하게 한다. 디폴트는 PREPARED이다. 
statementTypeFORWARD_ONLY, SCROLL_SENSITIVE, SCROLL_INSENSITIVE, DEFAULT(same as unset)중 하나를 선택할 수 있다. 디폴트는 셋팅하지 않는 것이고 드라이버에 다라 다소 지원되지 않을 수 있다. 
databaseId설정된 databaseIdProvider가 있는 경우 마이바티스는 databaseId 속성이 없는 모든 구문을 로드하거나 일치하는 databaseId와 함께 로드될 것이다. 같은 구문에서 databaseId가 있거나 없는 경우 모두 있다면 뒤에 나온 것이 무시된다. 
resultOrdered이 설정은 내포된 결과를 조회하는 구문에서만 적용이 가능하다. true로 설정하면 내포된 결과를 가져오거나 새로운 주요 결과 레코드를 리턴할때 함께 가져오도록 한다. 이전의 결과 레코드에 대한 참조는 더 이상 발생하지 않는다. 이 설정은 내포된 결과를 처리할때 조금 더 많은 메모리를 채운다. 디폴트값은 false 이다. 
resultSets이 구문을 사용하면 쿼리의 각 결과 세트를 별도의 개체에 매핑할 수있다. 
affectData트랜잭션이 적절하게 제어되도록 데이터를 반환하는 INSERT, UPDATE 또는 DELETE 문을 작성할 때 이를 true로 설정합니다. 또한 트랜잭션 제어 방법을 참조하십시오 . 기본값: fals## 🔗참조

🔗참조

[MyBatis – 마이바티스 3매퍼 XML 파일](https://mybatis.org/mybatis-3/ko/sqlmap-xml.html#mapper-xml-파일)