자바 어플리케이션과 데이터베이스를 연동한 프로그래밍을 하기 위해서 JDBC를 사용합니다. JDBC를 사용할 경우 코드가 복잡, 1개의 클래스에 반복되는 코드 존재, 하나의 파일에 자바 언어와 sql언어가 같이 있어서 재사용성이 안좋은 점 등 단점들이 존재합니다. MyBatis는 이러한 JDBC의 단점들을 보완하여 데이터베이스를 연동하는 프로그래밍을 좀 더 쉽게 할 수 있도록 도와주는 개발 프레임워크 입니다.
MyBatis는 자바와 데이터베이스를 연동한 프로그래밍을 위해 반드시 필요하진 않습니다. 하지만 해당 라이브러리를 사용한다면 기존 JDBC 프로그래밍을 하는 것보다 좀 더 빠르고, 쉽고, 편안하게 프로그래밍을 할 수 있기 때문에 많이 사용됩니다.
MyBatis를 사용하기 위해선 mybatis / mybatis-spring / spring-jdbc / spring-tx 총 4개의 라이브러리가 필요합니다. MyBatis-Spring은 스프링과 MyBatis를 연동 시켜주는 라이브러리입니다. 스프링에서 MyBatis를 사용하는 구조는 다음과 같습니다.
spring-jdbc와 spring-tx는 스프링에서 데이터베이스 처리와 트랜잭션 처리를 하는 라이브러리입니다. MyBatis와 무관해 보이지만 추가하지 않은 경우에는 에러가 발생하기 때문에 추가해줍니다.
<!-- MyBatis 추가 -->
<!-- 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>
MyBatis에서 가장 핵심적인 객체는 SQLSession입니다. SQLSession객체는 개방에서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 받도록 해줍니다. 이러한 SQLSession을 만들어 내는 객체가 SQLSessionFactory입니다. 이 객체(SQLSessionFactory)는 MyBatis-spring 라이브러리의 클래스입니다.
스프링에서 SQLSessionFactory 객체를 인식 시키기 위해서 SqlSessionFactoryBean을 사용합니다.
<!-- MyBatis 추가 -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="datasource"></property>
</bean>
@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();
}
}
}
Junnit을 통해 테스트
결과 확인
- MySQL 연결 프로젝트 콘솔창