web

코드로 배우는 스프링 웹프로젝트 - 04 MyBatis와 스프링 연동

늉_늉 2020. 9. 30. 18:39

목표 : 스프링 프레임워크와 MyBatis를 연동해서 빠르게 SQL을 처리할 수있는 구조 만들기

 

 

 

 

 

 

Mybatis

 

  -SQL매핑 프레임워크로 분류, JDBC코드의 복작하고 지루한 작업을 피하는용도

 

전통적인 JDB프로그램은

   -직접Connection 을 맺고 마지막에 close()처리해주고

     PreparedStatement 직접생성 및 처리 등등...과 같이 매우 귀찮았다

 

 

 

MyBatis

 

- 자동으로 Connectino close()가능

- 내부적으로 PreparedStatement처리

등등.. 간편하다

 

 

 

MyBatis의 장점 으로는

 

 

 

  • 기존의 SQL을 그대로 활용 할수 있음
  • 진입장벽이 낮아 JDBC의 대안으로 많이 사용
  • 다른 프레임워크들과의 연동이 쉽다(라이브러리)- mybatis-spring

 

 

예제의 구조는 아래와 같다.

 

 

Mybatis 관련 라이브러리 추가

 

pom.xml 라이브러리 추가해줘야한다.

 

 

[ex00] , [jex00]

 

 

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.4.6</version>
		</dependency>
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${org.springframework-version}</version>
		</dependency>

 

-spring-jdbc/spring-tx : 스프링에서 데이터베이스 처리와 트랜젝션 처리-mybatis/mybatis-spring : MyBatis와 스프링 연동용 라이브러리

 

 

 

 

SQLSessionFactory

 

- MyBatis에서 가장 핵심적 객체는 SQLSession 과 SQLSessionFactory 

 

- SQLSessionFactory 는 내부적으로 SQLSession을 만들어냄

 

- 개발에서는 SQLSession을 통해 Connection을 생성하거나 원하는 SQL을 전달 , 결과를 리턴받는 구조로 작성

 

 

root-context.xml 작성

 

(root-context.xml은 bean 설정 파일)

 

아래코드를 추가해준다.

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

 

SqlSessionFactory를 등록하는 작업은 SqlSessionFactoryBean을 이용한다.

 

 

 

 

 

 

 

 

 

Java설정을 이용하는 경우[jex00]

 

아래 코드를 RootConfig.java에 추가해 준다.

@Bean
	public SqlSessionFactory sqlSessionFactory() throws Exception{
		SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
		
		sqlSessionFactory.setDataSource(dataSource());
		return (SqlSessionFactory) sqlSessionFactory.getObject();
		

 

 

 

 

DataSourceTests 에 아래의 코드를 추가해 준다.

 

 

@Setter(onMethod_ = {@Autowired} )
	private SqlSessionFactory sqlSessionFactory;
	
	@Test
	public void testMyBatis() {
		try (SqlSession session = sqlSessionFactory.openSession();
			Connection con = session.getConnection();
				){
			log.info(session);
			log.info(con);
			
		} catch (Exception e) {
			fail(e.getMessage());
		}
	}

	

 

 

junit test를 돌리면 위와같이 확인할 수있다.