[ MyBatis3 ] 매퍼설정 XML(typeHandlers, objectFactory, ...)

 typeHandlers


- MyBatis가 PreparedStatement에 파라미터를 세팅하고 ResultSet에서 값을 가져올때 마다, TypeeHandler는     적절한 자바타입의 값 을 가져오기 위해 사용된다.
- 지원하지 않거나 비표준인 경우 아래와 같이 오버라이드 하여 사용 가능 하다.
public class ExampleTypeHandler implements TypeHandler {
@Override
public Object getResult(ResultSet rs, String str) throws SQLException {
// TODO Auto-generated method stub
return rs.getString(str);
}

@Override
public Object getResult(CallableStatement cs, int i) throws SQLException {
// TODO Auto-generated method stub
return cs.getString(i);
}

@Override
public void setParameter(PreparedStatement ps, int i, Object obj, JdbcType type) throws SQLException {
// TODO Auto-generated method stub
ps.setString(i,(String)obj);
}
}

- MyBatis는 타입을 판단하기 위해 데이터베이스의 메타데이터를 보지 않는다. 그래서 파라미터와 결과에 정확한 타입핸들러를 매핑해야 한다.

# objectFactory

- 결과객체의 인스턴스를 만들기 위해 사용한다.

# plugins

- MyBatis는 매핑 구문을 실행하는 어느 시점에 호출을 가로챈다. 기본적으로 MyBatis는 메소드 호출을 가로채기 위한 플러그인을 허용한다.

설정파일 오버라이드하기 

플러그인을 사용해서 MyBatis핵심 행위를 변경하기 위해, Configuration 클래스 전체를 오버라이드 할 수 있다. 이 클래스를 확장하고 내부메소드를 오버라이드 하고, sqlSessionFactoryBuilder.build(myConfig) 메소드에 그 객체를 넣어주면 된다. 이 작업은 MyBatis에 큰 영향을 줄수 있으니 주의해서 해야한다.

# environments

- 여러개의 환경으로 설정 할 경우 사용
- 중요한 것은 다중환경을 설정할 수 있지만 SqlSessionFactory 인스턴스마다 한개씩만 사용할 수 있다는 것
=> 데이터베이스별로 하나의 SqlSessionFactory

<environments default="development">
<environment id="development">

<transactionManager type="JDBC"/>

<dataSource type="POOLED">

<property name="driver"value="${driver}"/>

<property name="url"value="${url}"/>

<property name="username"value="${username}"/>

<property name="password"value="${password}"/>

</dataSource>

</environment>

</environments > 

* transactionManager
  • JDBC - 이 설정은 간단하게 JDBC 커밋과 롤백을 처리하기 위해 사용된다. 트랜젝션의 스코프를 관리하기 위해 dataSource로 부터 커넥션을 가져온다.

  • MANAGED - 이 설정은 어떤 것도 하지 않는다. 대신 컨테이너가 트랜젝션의 모든 생명주기를 관리한다.

* dataSource

  • UNPOOLED - 매번 요청에 대해 커넥션을 열고 닫는 간단한 DataSource이다.
  • POOLED - 폴링이 적용된 JDBC 커넥션을 위한 구현체이다. Connection 인스턴스를 생성하기 위해 매번 초기화하는 것을 피하게 해준다
  • JNDI - 컨테이너에 따라 설정이 변경되며, JNDI컨텍스트를 참조한다.