[java] MyBatis에서 커넥션 관리

MyBatis는 대표적인 자바 ORM(Object Relational Mapping) 도구로서, 데이터베이스와 자바 어플리케이션 사이의 상호작용을 효율적으로 처리합니다. 커넥션 관리는 MyBatis에서 중요한 부분 중 하나이며, 이를 효과적으로 관리하는 방법에 대해 알아보겠습니다.

1. Datasource 설정

MyBatis에서 커넥션을 관리하기 위해선 먼저 Datasource를 설정해야 합니다. Datasource는 데이터베이스와 연결된 커넥션 풀을 제공하며, 애플리케이션과 데이터베이스 사이의 연결을 관리합니다. 이를 통해 커넥션을 생성하고 관리함으로써, 매번 커넥션을 새로 연결하는 비용을 줄일 수 있습니다.

Datasource를 설정하기 위해선, MyBatis에서 제공하는 Datasource 구현체 중 하나를 선택해야 합니다. 가장 많이 사용되는 Datasource 구현체로는 Apache Commons DBCP, HikariCP 등이 있습니다.

아래는 HikariCP를 사용하여 Datasource를 설정하는 예시입니다.

import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

public class MyBatisConfig {
    public static DataSource getDataSource() {
        HikariConfig config = new HikariConfig();
        config.setJdbcUrl("jdbc:mysql://localhost:3306/mydatabase");
        config.setUsername("myuser");
        config.setPassword("mypassword");

        return new HikariDataSource(config);
    }
}

위 예시에서는 HikariCP를 사용하여 Datasource를 설정하고 있습니다. HikariConfig 클래스를 이용하여 데이터베이스 접속 정보를 설정하고, HikariDataSource를 통해 Datasource를 생성합니다.

2. SqlSessionFactory 설정

Datasource를 설정한 후에는 SqlSessionFactory를 설정해야 합니다. SqlSessionFactory는 MyBatis의 핵심인 SqlSession을 생성하는 역할을 합니다. SqlSession은 실제로 데이터베이스와의 작업을 수행하는 인터페이스입니다.

SqlSessionFactory를 설정하기 위해선, MyBatis에서 제공하는 SqlSessionFactoryBuilder 클래스를 사용하여 설정 파일로부터 SqlSessionFactory를 생성합니다. 설정 파일에는 Datasource와 매핑되는 설정 정보, SQL 매퍼 파일의 위치 등이 정의되어야 합니다.

아래는 SqlSessionFactory를 설정하는 예시입니다.

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MyBatisConfig {
    public static SqlSessionFactory getSqlSessionFactory() throws IOException {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        return new SqlSessionFactoryBuilder().build(inputStream);
    }
}

위 예시에서는 mybatis-config.xml 파일로부터 SqlSessionFactory를 생성하고 있습니다. Resources.getResourceAsStream() 메소드를 이용하여 설정 파일을 로드하고, SqlSessionFactoryBuilder().build() 메소드를 통해 SqlSessionFactory를 생성합니다.

3. SqlSession 사용

SqlSessionFactory를 생성한 후에는 SqlSession을 사용하여 데이터베이스와의 작업을 수행할 수 있습니다. SqlSession은 필요에 따라 커넥션을 얻어오고, SQL 문을 실행하며, 트랜잭션을 관리하는 역할을 합니다.

아래는 SqlSession을 사용하여 데이터베이스에 쿼리를 실행하는 예시입니다.

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

public class MyBatisExample {
    public static void main(String[] args) throws IOException {
        SqlSessionFactory sqlSessionFactory = MyBatisConfig.getSqlSessionFactory();
        try (SqlSession session = sqlSessionFactory.openSession()) {
            User user = session.selectOne("UserMapper.getUserById", 1);
            System.out.println(user);
        }
    }
}

위 예시에서는 MyBatisConfig.getSqlSessionFactory() 메소드를 호출하여 SqlSessionFactory를 얻어온 후, sqlSessionFactory.openSession() 메소드를 사용하여 SqlSession을 생성합니다. session.selectOne() 메소드를 사용하여 쿼리를 실행하고 결과를 얻어오는 예시입니다.

결론

MyBatis에서 커넥션을 효과적으로 관리하기 위해서는 Datasource와 SqlSessionFactory를 적절히 설정해야 합니다. Datasource를 이용하여 커넥션 풀을 관리하고, SqlSessionFactory를 이용하여 SqlSession을 생성하여 데이터베이스와의 작업을 수행할 수 있습니다. 이를 통해 MyBatis를 보다 효율적으로 사용할 수 있습니다.

참고 자료: