[LG U+ 유레카 3기] MyBatis ch03 실습 | SqlSessionFactory 직접 구성하기
2025. 10. 17. 15:25ㆍJava/Mybatis

❶ 상황 설명
ch03에서는 MyBatis의 내부 동작 구조를 직접 구성해보는 실습이었다.
이전 ch02까지는 XML 설정 파일(mybatis-config.xml)을 이용했지만, 이번에는 자바 코드에서 Configuration 객체를 이용해 환경(Environment), 트랜잭션 팩토리(TransactionFactory), 데이터소스(DataSource), 매퍼(Mapper)를 직접 등록하여 SqlSessionFactory를 수동으로 생성했다.
❷ 코드 및 실행 흐름
① SqlSessionFactory 직접 구성 코드
package ch03;
import org.apache.ibatis.datasource.pooled.PooledDataSource;
import org.apache.ibatis.mapping.Environment;
import org.apache.ibatis.session.*;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import java.util.List;
public class BookApp {
public static void main(String[] args) {
// 1️⃣ DataSource 설정 (커넥션 풀 방식)
PooledDataSource dataSource = new PooledDataSource();
dataSource.setDriver("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis_basic");
dataSource.setUsername("root");
dataSource.setPassword("1234");
// 2️⃣ Environment 구성 (트랜잭션 관리 포함)
Environment environment = new Environment(
"development",
new JdbcTransactionFactory(),
dataSource
);
// 3️⃣ Configuration 객체 생성 및 매퍼 등록
Configuration configuration = new Configuration(environment);
configuration.addMapper(ch03.BookDao.class);
// 4️⃣ SqlSessionFactory 생성
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
// 5️⃣ SqlSession 열고 실행
try (SqlSession session = sqlSessionFactory.openSession()) {
BookDao dao = session.getMapper(BookDao.class);
List<Book> list = dao.getBooks();
for (Book b : list) {
System.out.println(b.getTitle() + " / " + b.getPrice());
}
}
}
}
② Mapper 인터페이스 (BookDao.java)
package ch03;
import java.util.List;
public interface BookDao {
List<Book> getBooks();
}
③ Mapper XML (BookDao.xml)
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="ch03.BookDao">
<select id="getBooks" resultType="ch03.Book">
SELECT * FROM book;
</select>
</mapper>
❸ 실행 결과
[출력 예시]
Effective Java / 38000
토비의 스프링 / 42000
Real MySQL / 45000
결과적으로 SqlSessionFactory를 코드로 직접 구성해도 XML 방식과 동일한 동작을 수행했다.
하지만 이 접근은 프레임워크 내부 동작을 이해하는 데 매우 유용하다.
❹ 개념 정리
- PooledDataSource : 커넥션 풀(Connection Pool)을 이용하는 데이터소스 구현체. 매번 커넥션을 생성하지 않아 효율적
- Environment : 트랜잭션 팩토리와 데이터소스 설정을 묶는 객체
- Configuration : MyBatis의 모든 환경 설정을 담는 중심 객체. 매퍼 등록, 설정, 타입 핸들러 등을 관리
- SqlSessionFactoryBuilder : 설정(Configuration)을 기반으로 SqlSessionFactory 생성
- addMapper() : 특정 Mapper 인터페이스를 Configuration에 직접 등록
❺ 핵심 요약
✅ ch03은 MyBatis의 동작 구조를 “수동 구성 방식”으로 학습한 단계다.
✅ SqlSessionFactory를 코드로 직접 생성하며, 내부 매커니즘을 이해했다.
✅ MyBatis가 어떻게 환경(Environment) → 설정(Configuration) → 세션(SqlSession)으로 이어지는지 학습했다.
✅ XML 없이도 동일한 결과를 낼 수 있지만, 실무에서는 유지보수성을 위해 XML 기반 구성이 일반적이다.
'Java > Mybatis' 카테고리의 다른 글
| Spring MVC + MyBatis 실습 (0) | 2025.11.06 |
|---|---|
| [LG U+ 유레카 3기] MyBatis 실습 준비 | Maven 환경 세팅 정리 (0) | 2025.10.17 |
| [LG U+ 유레카 3기] MyBatis ch02 |어노테이션 매핑 실습 (0) | 2025.10.17 |
| [LG U+ 유레카 3기] MyBatis ch01 | XML 기반 매핑 실습 (0) | 2025.10.17 |