Kim VamPa

[Spring][05-1]MyBatis 라이브러리 추가, SQLSessionFactory 설정 본문

공부/스프링

[Spring][05-1]MyBatis 라이브러리 추가, SQLSessionFactory 설정

Kim VamPa 2020. 4. 11. 13:00
728x90
반응형

개인 공부 후 자료를 남기기 위한 목적이기에 내용 상에 오류가 있을 수 있습니다.

git주소(Oracle DB) : https://github.com/sjinjin7/blog_study

git주소(MySQL DB) : https://github.com/sjinjin7/blog_study-MYSQL-base-


목표

  • MyBatis가 무엇인지와 사용하는 이유에대해 알아보고자합니다.
  • MyBatis 라이브러리 추가 방법에대해 알아보고자합니다.
  • 더불어 MyBatis를 사용하기위해 설정해야 하는 SQLSessionFactory 설정에 대해 알아보고자합니다.
  • 라이브러리 정상적으로 추가되엇고 SQLSessionFactory 설정이 잘되었는지 테스트도 진행해보겠습니다.

목차

1. MyBatis 란?

2. MyBatis 라이브러리 추가 방법

3. SQLSession 설정방법

4. 테스트

 

1. MyBaits란?

  자바 어플리케이션과 데이터베이스를 연동한 프로그래밍을 하기 위해서 JDBC를 사용합니다. JDBC를 사용할 경우 코드가 복잡, 1개의 클래스에 반복되는 코드 존재, 하나의 파일에 자바 언어와 sql언어가 같이 있어서 재사용성이 안좋은 점 등 단점들이 존재합니다. MyBatis는 이러한 JDBC의 단점들을 보완하여 데이터베이스를 연동하는 프로그래밍을 좀더 쉽게 할 수 있도록 도와주는 개발 프레임워크 입니다.

 MyBatis는 자바와 데이터베이스를 연동한 프로그래밍을 위해 반드시 필요하진 않습니다. 하지만 해당 라이브러리를 사용한다면 기존 JDBC 프로그래밍을 하는 것보다 좀 더 빠로고, 쉽고, 편안하게 프로그래밍을 할 수 있기 때문에 많이 사용됩니다.

 

특징

  • JDBC에서 SQL한문장을 실행 시키기 위해서 개발자는 많은 코드를 작성을 해야합니다. 하지만 MyBatis를 사용 할 경우 한 두줄의 코드로 SQL문을 실행 시킬 수 있습니다.
    - 자동으로 Connection close() 기능
    - 리턴 타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet 처리
  • SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리합니다.
  • 기존의 SQL을 그대로 활용할 수 있는 장점이 잇습니다.
  • 진입장벽이 낮아서 JDBC의 대안으로 많이 사용합니다.

2. MyBaits 라이브러리 추가 방법

 

필요 라이브러리

 

 MyBatis를 사용하기 위해선 mybatis / mybatis-spring / spring-jdbc / spring-tx 총 4개의 라이브러리가 필요합니다. MyBatis-Spring은 스프링과 MyBatis 를 연동 시켜주는 라이브러리입니다. 스프링에서 MyBatis를 사용하는 구조는 다음과 같습니다.

 

그림 1-1

 

 spring-jdbc와 spring-tx는 스프링에서 데이터베이스 처리와 트랜잭션 처리를 하는 라이브러리입니다. MyBatis와 무관해 보이지만 추가하지 않은 경우에는 에러가 발생하기 때문에 추가해줍니다.

 

 

1) 아래의 Mavaen 코드를 pom.xml에 추가해줍니다.

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

그림 2-1

 

3. SQLSessionFactory 설정

 

 MyBatis에서 가장 핵심적인 객체는 SQLSession 입니다. SQLSession객체는 개방에서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 바도록 해줍니다. 이러한 SQLSession을 만들어 내는 객체가 SQLSessionFactory입니다. 이 객체(SQLSessionFactory)는 MyBatis-spring 라이브러리의 클래스입니다.

 스프링에서 SQLSEssionFactory 객체를 인식 시키기 위해서 SqlSessionFactoryBean을 사용합니다. 그 사용방법에 대해 알아보겠습니다.

 

1) 아래의 코드를 root-context.xml에 추가해줍니다.

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<property name="dataSource" ref="datasource"></property>
	</bean>	

그림 3-1

 

4. 테스트

 이번 포스팅에서 추가하고 설정한 것들이 정상적으로 작동하는지 알아보기 위해 테스트를 진행하겠습니다. SqlSessionFactoryBean을 이용해서 SqlSession을 사용해보는 테스트를 하겠습니다. 이번 테스트는 저번포스팅([][Spring][04]커넥션 풀 설정(HikariCP))에서 사용한 DataSourceTest 클래스에 코드를 추가해서 테스트해보겠습니다.

 

1) 기존 DataSourceTest.java 클래스에 테스트할 코드를 추가합니다.

- SqlSessionFacory 객체를 주입시킵니다.

- try문에 SqlSession 객체를 인스턴스화 하는 코드와 출력문 코드를 추가합니다.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
public class DataSourceTest {

	@Autowired
	private DataSource dataSource;
	
	@Autowired
	private SqlSessionFactory sqlSessionFactory;
	
	@Test
	public void testConnection() {
		try(
			Connection con = dataSource.getConnection();
			SqlSession session = sqlSessionFactory.openSession();
		){
			
		System.out.println("con=" + con);
		System.out.println("session=" + session);
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}
	
}

그림 4-1

 

 

2) Junnit을 통해 테스트합니다. 

그림 4-2

 

3) 결과를 확인합니다.

그림 4-3

- Oracle 연결 프로젝트 콘솔창

그림 4-4

- MySQL 연결 프로젝트 콘솔창

그림 4-5

 

 

Reference

Date

  • 2020.04.11 작성

 

 

 

 

728x90
반응형
Comments