[java] Guice와 MyBatis의 통합

소개

이번 글에서는 Guice와 MyBatis의 통합에 대해 알아보겠습니다. Guice는 Google에서 개발한 의존성 주입(Dependency Injection) 프레임워크로써, MyBatis는 자바 객체와 SQL 문 사이의 매핑을 처리해주는 ORM(Object Relational Mapping) 프레임워크입니다. Guice와 MyBatis를 함께 사용하면 의존성 주입을 통해 MyBatis의 설정 및 인스턴스화를 간소화할 수 있습니다.

Guice와 MyBatis의 설정

먼저, Guice와 MyBatis를 함께 사용하기 위해서는 Guice와 MyBatis의 설정을 추가해야 합니다.

1. Maven 종속성 추가

먼저, 프로젝트의 Maven 종속성에 다음과 같은 라이브러리를 추가합니다.

<dependencies>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>4.2.3</version>
    </dependency>
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.4</version>
    </dependency>
</dependencies>

2. Guice 설정 작성

다음으로, Guice의 설정 파일을 작성합니다. 예를 들어, GuiceModule.java 파일을 생성하고 다음과 같이 작성합니다.

import com.google.inject.AbstractModule;
import org.mybatis.guice.XMLMyBatisModule;

public class GuiceModule extends AbstractModule {
    @Override
    protected void configure() {
        install(new XMLMyBatisModule() {
            @Override
            protected void initialize() {
                setEnvironmentId("development");
                setClassPathResource("mybatis-config.xml");
            }
        });
    }
}

AbstractModule을 확장한 클래스를 작성하고, XMLMyBatisModule을 활용하여 MyBatis의 설정 파일 경로를 지정합니다.

3. MyBatis 설정 작성

마지막으로, MyBatis의 설정 파일(mybatis-config.xml)을 작성합니다. 이 파일은 MyBatis의 세부 설정을 담고 있습니다. 필요한 설정을 추가하고, DAO나 Mapper 클래스의 경로를 지정합니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="UNPOOLED">
                <property name="driver" value="${jdbc.driverClassName}"/>
                <property name="url" value="${jdbc.url}"/>
                <property name="username" value="${jdbc.username}"/>
                <property name="password" value="${jdbc.password}"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/example/MyMapper.xml"/>
    </mappers>
</configuration>

environments 태그에서는 데이터베이스 연결 관련 설정을 지정하고, mappers 태그에서는 DAO나 Mapper 클래스의 경로를 지정합니다.

Guice를 사용한 MyBatis 인스턴스화

이제 Guice를 사용하여 MyBatis의 인스턴스를 생성할 수 있습니다. 다음은 DAO 클래스를 예로 들어 Guice를 통해 MyBatis의 인스턴스를 생성하는 코드입니다.

public class MyDao {
    private SqlSessionFactory sqlSessionFactory;

    @Inject
    public MyDao(SqlSessionFactory sqlSessionFactory) {
        this.sqlSessionFactory = sqlSessionFactory;
    }

    public void insertData(MyData data) {
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            sqlSession.insert("com.example.MyMapper.insertData", data);
        }
    }
}

SqlSessionFactory 인스턴스는 Guice의 의존성 주입으로 받아올 수 있으며, DAO 클래스에서 필요한 MyBatis 기능을 사용할 수 있습니다.

결론

Guice와 MyBatis를 함께 사용하면 의존성 주입을 통해 MyBatis의 설정과 인스턴스화를 간소화할 수 있습니다. 이를 통해 개발자는 더욱 편리하게 MyBatis의 ORM 기능을 활용할 수 있습니다.