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컨텍스트를 참조한다.
Recent Comments