Myibatis 와 spring 의 통합 (사무 설정 과) 2

6275 단어 spring
어제 이미 주요 클래스 와 프로필 을 붙 였 습 니 다. 오늘 분석 해 보 겠 습 니 다. 저도 ibatis 에서 MyIbatis 까지 사 용 했 습 니 다. MyBatis 의 전신 은 iBatis 입 니 다. 두 가지 차이 점도 있 고 개선 도 많 습 니 다. MyBatis 는 sql 에 대한 지원 이 더욱 좋 고 유연 합 니 다. 1. 어떻게 spring 과 통합 합 니까?첫 번 째 단 계 는 applicationContext. xml 에 해당 하 는 설정 을 추가 하 는 것 이 분명 합 니 다. Myibatis 를 관리 하 는 spring 용기 가 있 습 니 다. 그러면 이 jar 는 빠 질 수 없 는 my batis - spring - 1.0.1 - SNAPSHOT. jar 는 Spring 3.0 이 iBatis 2 만 지원 하기 때 문 입 니 다.그러면 저 희 는 MyBatis 3 의 지원 을 Spring 3.0 에 추가 하고 싶 습 니 다.불 행 히 도 Spring 3.0 의 개발 은 MyBatis 3.0 의 공식 발표 전에 끝났다.그래서 이 jar 는 spring 공식 이 아니 라 MyBatis 팀 의 후속 개발 일 것 입 니 다. MyBatis - Spring 에서 SqlSession Factory Bean 은 SqlSession Factory 를 만 드 는 데 사 용 됩 니 다.이 작업 bean 을 설정 하려 면 아래 코드 를 Spring 의 applicationContext. xml 설정 파일 에 배치 하 십시오.

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="configLocation" value="classpath:/config/ibatisConfig.xml" />
	<property name="typeAliasesPackage" value="com.ibatis.model" />
	<property name="mapperLocations" value="classpath*:com/ibatis/mapper/*.xml" />
</bean>

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	<property name="basePackage" value="com.ibatis.dao" />
</bean>

SqlSession Factory 는 DataSource 가 필요 합 니 다. 이것 은 임의의 DataSource 일 수 있 습 니 다. 설정 은 다른 Spring 데이터 베 이 스 를 설정 하 는 것 과 같 습 니 다. SqlSession Factory Bean 은 Spring 의 Factory Bean 인 터 페 이 스 를 실 현 했 습 니 다. 이것 은 Spring 이 최종 적 으로 만 든 bean 은 Session Factory Bean 자체 가 아니 라 공장 류 의 getObject () 가 되 돌아 오 는 방법 에 대한 결 과 를 설명 합 니 다.이 경우 Spring 은 애플 리 케 이 션 이 시 작 될 때 SqlSession Factory 대상 을 만 든 다음 SqlSession Factory 라 는 이름 으로 저장 합 니 다. 일반적인 MyBatis - Spring 용법 에 서 는 SqlSession Factory Bean 이나 이에 대응 하 는 SqlSession Factory 를 직접 사용 할 필요 가 없습니다.반면, session 공장 은 apperFactory Bean 이나 SqlSession Dao Support 를 확장 한 DAO SqlSession Factory 의 몇 가지 주요 속성 에 주입 된다. 하나의 필수 속성 이 있 는데 그것 이 바로 JDBC 의 DataSource 이다.이것 은 임의의 DataSource 일 수 있 습 니 다. 그 설정 은 다른 Spring 데이터베이스 와 연결 되 어야 합 니 다.일반적인 속성 은 configLocation 입 니 다. MyBatis 의 XML 프로필 경 로 를 지정 하 는 데 사 용 됩 니 다.기본 적 인 MyBatis 설정 이 바 뀌 어야 한다 면 이것 이 필요 한 곳 입 니 다.보통 이것 은 < settings > 나 < type: Aliases > 의 부분 입 니 다.이 프로필 은 완전한 MyBatis 설정 이 필요 하지 않 습 니 다.임의의 환경, 데이터 원본, MyBatis 의 사무 관리 자 는 SqlSession Factory Bean 을 무시 합 니 다. 이 값 을 사용 하여 MyBatis 의 Environment 를 만 들 때 필요 합 니 다.yBatis 맵 기 XML 파일 이 맵 기 류 와 같은 경로 에서 존재 하지 않 는 다 면 다른 설정 파일 이 필요 한 이 유 는 바로 그것 입 니 다.이 설정 을 사용 하면 두 가지 선택 이 있 습 니 다.첫 번 째 는 MyBatis 의 XML 설정 파일 에서 < mappers > 부분 을 사용 하여 클래스 경 로 를 지정 하 는 것 입 니 다.두 번 째 는 공장 bean 의 mapperLocations 속성 을 사용 합 니 다.속성 mapperLocations 는 자원 위치의 list 를 사용 합 니 다.이 속성 은 MyBatis 의 XML 맵 파일 의 위 치 를 지정 하 는 데 사용 할 수 있 습 니 다.이 값 은 앤 트 스타일 을 포함 하여 디 렉 터 리 에 있 는 모든 파일 을 불 러 오 거나 기본 경로 에서 모든 경 로 를 재 귀적 으로 검색 할 수 있 습 니 다.classpath *: com / ibatis / mapper / *. xml 속성 type: Aliases Package 는 이름 으로 볼 때 [형식의 별명] 가방 입 니 다. 이 가방 아래 의 종 류 를 기본 값 으로 별명 을 만 듭 니 다. 아 날로 그 전 칭 입 니 다. 이것 을 설정 한 후에 나중에 우리 의 맵 파일 * Mapper. xml 에서 사용 할 수 있 습 니 다. 사용 하지 않 아 도 됩 니 다.  resultType = "com. *. Person" 같은 것 은 클래스 이름 을 직접 사용 하면 됩 니 다. resultType = "Person". 속성 configLocation 는 mybatis - config. xml 파일 (파일 이름 은 임의로 사용 가능) 을 불 러 와 Myibatis 의 기본 속성 과 핵심 설정 을 수정 하 는 데 사 용 됩 니 다. 예 를 들 어 저 희 는 저장 과정 에서 돌아 오 는 커서 [CURSOR] 를 사용 합 니 다.그러나 우 리 는 이 커서 를 List < map < String, Object > 의 집합 으로 바 꾸 고 싶 습 니 다. 그러면 저 는 BaseTypeHandler 라 는 종 류 를 계승 하여 처리 할 수 있 습 니 다. 방법 은 다음 과 같 습 니 다. my batis - config. xml 에 추가 할 수 있 습 니 다.

<typeHandlers>
	<typeHandler javaType="Map" jdbcType="CURSOR" handler="com.ibatis.typeHandler.ResultSetTypeHandler"/>
</typeHandlers>

그러면 ResultSetTypeHandler 라 는 종 류 는 구체 적 인 실현 코드 입 니 다. 다음 과 같 습 니 다.

package com.ibatis.typeHandler;


import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

/**
 *           
 * @author wujj
 */
public class ResultSetTypeHandler extends BaseTypeHandler<List<Map<String, Object>>> {

	@Override
	public List<Map<String, Object>> getNullableResult(ResultSet arg0, String arg1) throws SQLException {
		return null;
	}

	@Override
	public List<Map<String, Object>> getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {

		List<Map<String, Object>> result = new ArrayList<Map<String, Object>>();

		ResultSet rs = (ResultSet) cs.getObject(columnIndex);

		if (!rs.isClosed()) {

			ResultSetMetaData data = rs.getMetaData();
			int columnCnt = data.getColumnCount();

			while (rs.next()) {
				Map<String, Object> rowMap = new HashMap<String, Object>();
				for (int i = 1; i <= columnCnt; i++) {
					String colName = data.getColumnName(i).toLowerCase();
					Object colValue = rs.getObject(colName);
					// TODO     
					rowMap.put(colName, colValue == null ? StringUtils.EMPTY : colValue.toString());
				}
				result.add(rowMap);
			}
		}

		return result;
	}

	@Override
	public void setNonNullParameter(PreparedStatement arg0, int arg1, List<Map<String, Object>> arg2, JdbcType arg3) throws SQLException {
	}

}

어떤 Service 가 update 를 실행 할 때 차단 하 는 등 차단기 와 유사 한 기능 을 추가 할 수도 있 습 니 다.
오늘 은 여기까지 쓰 겠 습 니 다. 이것 은 sqlSession Factory 의 주요 속성 에 대한 소개 입 니 다. 내일 계속...

좋은 웹페이지 즐겨찾기