가희의자기개발블로그

매퍼 설정 본문

백엔드/myBatis

매퍼 설정

가희gahui 2020. 7. 1. 19:11
반응형

마이바티스 XML 설정파일은 다양한 설정과 프로퍼티를 가진다. 문서의 구조는 다음과 같다.

configuration

1. typeAliases

타입 별칭은 자바 타입에 대한 짧은 이름이다. 오직 xml 설정에서만 사용되며, 파이핑을 줄이기 위해 존재한다. 

<typeAliases>
		<typeAlias type="member.dto.MemberDTO" alias="member"/>
	</typeAliases>

이 설정에서 "member"는 여러군데서 "member.dto.MemberDTO"를 대신 사용할 수 있다.

마이바티스가 빈을 찾도록 패키지를 명시할수 있다. 

 

위 예시는 mapper.xml파일에서

<select id="findId" parameterType="member">
Select * from board 
</select>

이런식으로 쓰일수 있다.

2_ environments

마이바티스는 여러개의 환경으로 설정할 수 있다. 여러가지 이유로 여러개의 데이터베이스에 SQL Map을 적용하는데 도움이 된다. 예를들어, 개발, 테스트, 리얼 환경을 위해 별도의 설정을 가지거나 같은 스키마를 여러개의 DBMS제품을 사용할 경우들이다. 그 외에도 많은 경우가 있을 수 있다.

 

중요한 것은 다중 환경을 설정할 수는 있지만 SqlSessionFactory 인스턴스마다 한개만 사용할 수 있다는 것이다. 두개의 데이터베이스에 연결하고 싶다면 SqlSessionFactory인스턴스를 두개 만들 필요가 있다. 세개의 데이터베이스를 사용한다면 역시 세개의 인스턴스를 필요로 한다. 

 

●환경을 명시하기 위해 SqlSessionFactoryBuilder에 옵션으로 추가 파라미터를 주면 된다. 환경을 선택하는 두가지 시그니처는

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,environment);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,environment, properties);

environment 파라미터가 없으면 디폴트 환경이 로드된다. 

SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader);
SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(reader,properties);

environments 엘리먼트는 환경을 설정하는 방법을 정의한다.

<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<!-- POOLED, UNPOOLED,JNDI(Java Naming and Directory Interface) -->
			<dataSource type="POOLED">
				<property name="driver"
					value="oracle.jdbc.driver.OracleDriver" />
				<property name="url"
					value="jdbc:oracle:thin:@localhost:1521:xe" />
				<property name="username" value="C##java" />
				<property name="password" value="bit" />

			</dataSource>
		</environment>
	</environments>
  • 디폴트 환경(Environment) ID (예를들면, default ="development").
  • 각각의 환경을 정의한 환경(Environment) ID (ex, id="development")
  • TransactionManager 설정(ex, type="JDBC")
  • DataSource 설정(ex, type="POOLED")

디폴트 환경(environment)과 환경(environment) ID는 용어 자체가 역할을 설명한다. 

 

2_1_ transactionManager

마이바티스는 두가지 타입의 TransactionManager를 제공한다.

  • JDBC - 이 설정은 간단하게 JDBC커밋과 롤백을 처리하기 위해 사용된다. 트랜잭션의 스코프를 관리하기 위해 dataSource로 부터 커넥션을 가져온다. 
  • MANAGED - 이 설정은 어떤것도 하지 않는다. 결코 커밋이나 롤백을 하지 않는다. 대신 컨테이너가 트랜잭션의 모든 생명주기를 관리한다. 디폴트로 커넥션을 닫긴 한다. 하지만 몇몇 컨테이너는 커넥션을 닫는 것 또한 기대하지 않기 때문에 커넥션 닫는 것으로 멈추고자 한다면 "closeConnection"프로퍼티를 false로 설정면 된다. 
<transactionManager type="MANAGED">
  <property name="closeConnection" value="false"/>
</transactionManager>

※ 마이바티스를 스프링과 함께 사용하는 경우에는 구성할 필요가 없다. 스프링 모듈 자체의 설정 때문에 어떤 TransactionManager이전에 설정된 구성을 무시하기 때문이다.

 

2_2_ dataSource

dataSource 엘리먼트는 표준 JDBC DataSource 인터페이스를 사용하여 JDBC Connection 객체의 소스를 설정한다.

3가지의 내장된 dataSource타입이 있다.

 

2_2_1 UNPOOLED 

이 구현체는 매번 요청에 대해 커넥션을 열고 닫는 간단한 DataSource이다. 조금 늦긴 하지만 성능을 크게 필요로 하지 않는 간단한 애플리케이션을 위해서는 괜찮은 선택이다. 이 타입에는 다음과 같은 속성이 있다.

  • driver - JDBC 드라이버의 패키지 경로를 포함한 결제 자바 클래스 명
  • url - 데이터베이스 인스턴스에 대한 JDBC URL
  • username - 데이터 베이스에 로그인 할 때 사용할 사용자명
  • password - 데이터베이스에 로그인 할 때 사용할 패스워드

2_2_2 POOLED

DataSource에 폴링이 적용된 JDBC 커넥션을 위한 구현체이다. 이는 새로운 Connection 인스턴스를 생성하기 위해 매번 초기화하는 것을 피하게 해준다. 그래서 빠른 응답을 요구하는  웹 애플리케이션에서는 가장 흔히 사용된다. 

 

2_2_3 JNDI

이 DataSource 구현체는 컨테이너에 따라 설정이 변경되며 JNDI 컨텍스트를 참조한다. 이 DataSource는 오직 두개의 프로퍼티만을 요구한다. 

 

마이바티스가 호출할 setter 메서드가 사용하는 프로퍼티를 추가해서 설정한다. 

<dataSource type="POOLED">
				<property name="driver"
					value="oracle.jdbc.driver.OracleDriver" />
				<property name="url"
					value="jdbc:oracle:thin:@localhost:1521:xe" />
				<property name="username" value="C##java" />
				<property name="password" value="bit" />

			</dataSource>

3. mappers

이제 매핑된 SQL 구문을 정의해야 한다.하지만 먼저 설정을 어디에 둘지 결정해야 한다. 자바는 자동으로 리소스를 찾기 위한 좋은 방법을 제공하지 않는다. 그래서 가장 좋은 건 어디서 찾으라고 지정하는 것이다. 클래스 패스에 상대적으로 리소스를 지정할 수도 있고 url을 통해서 지정할 수도 있다. 

 

<mappers><!-- resource의 경로(드로이버 곤간를 설정해줄때는 /로 설정! -->
		<mapper resource="member/dao/userMapper.xml" />
		<mapper resource="board/dao/boardMapper.xml" />
		<mapper resource="imageboard/dao/imageboardMapper.xml"/>
	</mappers>
<!-- 절대경로의 url을 사용 -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>

 

반응형

'백엔드 > myBatis' 카테고리의 다른 글

자바 API  (0) 2020.07.06
동적SQL  (0) 2020.07.04
Mapper XML파일  (0) 2020.07.04
myBatis 시작하기  (0) 2020.06.30
myBatis 개념  (0) 2020.06.22
Comments