[Spring] | MyBatis와 Spring 연동

제롬·2022년 10월 24일
0

MyBatis

목록 보기
3/3

MyBatis의 사용

  • MyBatis 를 Standalone 형태로 사용하는 경우, SqlSessionFactory 객체를 직접사용한다.
  • Spring을 연동하는 경우, 스프링 컨테이너에 MyBatis 관련 빈을 등록하여 MyBatis를 사용한다.
  • 스프링에서 제공하는 트랜잭션 기능을 사용하면 손쉽게 트랜잭션처리가 가능하다.
  • MyBatis를 스프링과 연동하기 위해서는 MyBatis에서 제공하는 Spring 연동 라이브러리가 필요하다.

[MyBatis 스프링 연동 라이브러리 의존관계 설정(Maven 프로젝트)]

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis-version}</version>
		</dependency>
		
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>${mybatis-spring-version}</version>
		</dependency>

MyBatis Datasource 설정

  • 스프링을 사용하는 경우, 스프링에서 데이터소스를 관리하므로 MyBatis 설정파일에서는 일부 설정을 생략한다.
  • 스프링 환경 설정파일(root-context.xml)에 데이터 소스를 설정한다.
  • 데이터 소스는 dataSource 아이디를 가진 빈으로 데이터베이스 연결정보를 가진 객체를 말한다.
  • MyBatis와 스프링을 연동하면 데이터베이스 설정과 트랜잭션 처리는 스프링에서 관리한다.

[Connection Pool 설정]

<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName" value="java:comp/env/jdbc/ssafy"></property>
</bean>

MyBatis 트랜잭션 관리자 설정

  • transactionManger 아이디를 가진 빈은 트랜잭션을 관리하는 객체이다.
  • MyBatis는 JDBC를 그대로 사용하기 때문에 DataSourceTransactionManager 타입의 빈을 사용한다.
  • tx:annotation-driven 요소는 트랜잭션 관리방법을 어노테이션으로 선언하도록 설정한다.
  • 스프링은 메소드나 클래스에 @Transaction이 선언되어 있으면, AOP를 통해 트랜잭션을 처리한다.

[트랜잭션 관리자 설정]

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name = "dataSource" ref="dataSource">
</bean>

[어노테이션기반 트랜잭션 설정]

<tx:annotation-driven tranaction-manager="tranactionManager">

SqlSessionFactory 설정

  • MyBatis 애플리케이션은 SqlSessionFactory를 중심으로 수행한다.
  • Spring에서 SqlSessionFactory 객체를 생성하기 위해서는 SqlSessionFactoryBean을 빈으로 등록해야 한다.
  • SqlSessionFactoryBean을 빈으로 등록할 때, 사용할 데이터 소스와 mybatis 설정파일 정보가 필요하다.

[SqlSessionFacotryBean 설정]

<bean id="sqlSessionFactoryBean" class="org.mabatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource">
  <property name="configLocation" value="classpath:com/test/config/mybatis/mybatis-config.xml">
  <property name="mapperLocations">
    <list>
      <value>classpath:com/test/config/mybatis/admin_board.xml</value>
      <value>classpath:com/test/config/mybatis/admin_member.xml</value>
      <value>classpath:com/test/config/mybatis/admin_poll.xml</value>
    </list>
  </property>
</bean>

mapper bean 등록

  • mapper 인터페이스를 사용하기 위해서 스캐너를 사용해서 자동으로 등록하거나, 직접 빈으로 등록해야 한다.
  • mapperScannerConfigurer을 설정하면, Mapper 인터페이스를 자동으로 검색하여 빈으로 등록한다.
    • basePackage로 패키지를 설정하면, 해당 패키지 하위의 모든 mapper 인터페이스가 자동으로 등록된다.
  • MapperFactoryBean 클래스는 mapper 인터페이스를 직접 등록할 때 사용한다.

[mapper 스캐너 사용]

<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basepackage" value="com.test.edu.mybatis.mapper">
</bean>

[mapper 인터페이스 직접등록]

<bean id="authorMapper" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="com.test.edu.mybatis.mapper.AuthorMapper">
  <property name="sqlSessionFactory" ref="sqlSessionFactory">
</bean>

MyBatis Configuration 파일 예시

  • 스프링을 사용하면 DB 접속정보 및 Mapper 관련설정은 스프링 빈으로 등록하여 관리한다.
  • 따라서, MyBatis 환경설정 파일에는 스프링에서 관리하지 않는 일부 정보만 설정한다. (예: typeAlias, typeHandler)
<configuration>
  <typeAliases>
    <typeAlias alias="listParameterDto" type="org.test.commons.model.ListParameterDto"/>
    <typeAlias alias="boardParameterDto" type="org.test.board.model.boardParameterDto"/>
  </typeAliases>
</configuration>

데이터 접근 객체 구현

데이터 접근 객체는 특정한 기술을 사용하여 데이터 저장소에 접근하는 방식을 구현한 객체이다.

  • @Repository 는 데이터 접근 객체를 빈으로 등록하기 위해 사용하는 스프링에서 제공하는 어노테이션이다.
  • @Autowired 어노테이션을 통해, 사용하려는 Mapper 인터페이스를 데이터접근 객체와 의존관계를 설정한다.

0개의 댓글