[java] 서블릿과 마이바티스 연동 방법

서블릿과 마이바티스(MyBatis)는 자바 웹 애플리케이션 개발에서 널리 사용되는 두 가지 핵심 기술입니다. 서블릿은 웹 요청을 처리하고 응답을 생성하는 데 사용되며, 마이바티스는 데이터베이스 접근을 위한 ORM(Object-Relational Mapping) 프레임워크입니다. 이러한 두 기술을 연동하여 웹 애플리케이션을 개발할 수 있습니다.

1. 마이바티스 설정

먼저, 마이바티스를 사용하기 위해 mybatis-config.xml 파일을 작성해야 합니다. 이 파일은 마이바티스 설정에 필요한 다양한 옵션을 포함하고 있습니다. 다음은 mybatis-config.xml 파일의 예시입니다.

<?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="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mydatabase" />
                <property name="username" value="username" />
                <property name="password" value="password" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <!-- 매퍼 파일 경로 설정 -->
        <mapper resource="mapper/UserMapper.xml" />
    </mappers>
</configuration>

위의 예시에서는 MySQL 데이터베이스에 접근하기 위한 설정이 포함되어 있습니다. 실제 프로젝트에서는 해당 데이터베이스와 연결하는 정보를 제공해야 합니다. 또한, 매퍼 파일 경로도 설정해야 합니다.

2. 서블릿에서 마이바티스 사용하기

서블릿에서 마이바티스를 사용하기 위해서는 먼저 SqlSessionFactory 객체를 생성해야 합니다. SqlSessionFactorymybatis-config.xml 파일을 기반으로 마이바티스 세션을 생성하는 역할을 합니다. 다음은 SqlSessionFactory 객체를 생성하는 코드 예시입니다.

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

public class MyBatisServlet extends HttpServlet {

    private SqlSessionFactory sqlSessionFactory;

    public void init() {
        // mybatis-config.xml 파일 경로 지정
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) {
        SqlSession session = sqlSessionFactory.openSession();
        try {
            // TODO: 마이바티스를 사용한 데이터베이스 접근 코드 작성
        } finally {
            session.close();
        }
    }

    public void destroy() {
        // 마이바티스 세션 종료
        sqlSessionFactory = null;
    }
}

위의 예시에서는 init 메서드에서 mybatis-config.xml 파일을 읽어와 SqlSessionFactory 객체를 생성하고, doGet 메서드에서 데이터베이스 접근을 위한 SqlSession 객체를 생성합니다. 필요한 데이터베이스 접근 코드를 작성한 뒤에는 finally 블록에서 세션을 종료해야 합니다. 마지막으로, destroy 메서드에서는 마이바티스 세션 팩토리를 종료합니다.

3. 매퍼 파일 작성

매퍼 파일은 마이바티스를 사용하여 데이터베이스 접근을 위한 SQL 문을 정의하는 파일입니다. 예를 들어, 사용자 정보를 조회하는 쿼리를 작성한다면 다음과 같은 매퍼 파일을 작성할 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.UserMapper">
    <select id="getUser" resultType="com.example.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

위의 예시에서는 getUser라는 아이디를 가진 select 문을 정의하고 있습니다. resultType 속성은 쿼리 결과를 매핑하기 위한 클래스를 지정합니다.

이와 같이 작성한 매퍼 파일은 mybatis-config.xml 파일에서 매퍼 경로를 설정해야 합니다. 위의 예시에서는 UserMapper.xml 파일을 매퍼 경로로 지정하고 있습니다.

결론

이제 서블릿과 마이바티스를 연동하는 방법을 알아보았습니다. 서블릿을 통해 웹 요청을 처리하고, 마이바티스를 사용하여 데이터베이스에 접근하는 웹 애플리케이션을 개발할 수 있습니다. 여기서는 간단한 예시를 다루었지만, 실제 프로젝트에서는 더 복잡한 데이터베이스 접근 로직을 작성할 수 있습니다.

References: