MyBatis - Connection Pool에서 SqlSession을 생성하여 반환하는 Connector 클래스 정의 및 활용

TopOfTheHead·2026년 4월 21일

MyBatis / JPA

목록 보기
5/10

인터페이스 정의
MyBatisConnection Pool 이외에도 HikariCP을 활용하여 SqlSession을 생성하도록 인터페이스일반화 수행

SqlSession을 생성하고 반환하는 추상 메서드 정의 및 접속정보 필드를 정의
Connector 역할의 자식 클래스에서 해당 필드를 참조 가능

public interface MyBatisSessionConnector {
	String DRIVER = "com.mysql.cj.jdbc.Driver";
	String URL = "jdbc:mysql://localhost:3306/mybatis_shop";
	String USERNAME = "root";
	String PASSWORD = "wjd747";
	// SqlSession을 생성하여 반환하는 추상 메서드
	SqlSession openSession();
	// AutoCommit을 활성화한 SqlSession을 생성하여 반환하는 추상 메서드
	SqlSession openSession(boolean autoCommit);
}

HikariCPConnection Pool을 기반으로 연결을 정의 및 SqlSession을 생성하여 반환하는 Connector 클래스 정의
인터페이스를 구현 및 HikariCP에서 가져온 Connection 객체를 전달하여 SqlSession 객체 생성하는 유틸 클래스

DataSource, TransactionManaver -> Environment -> Configuration 순으로 Java Bean을 생성 후 SqlSession 객체를 생성하여 반환

Connector 객체 생성 시 생성자 매개변수Mapper 인터페이스가 위치한 패키지 경로 / Entity 클래스패키지 경로를 입력하도록 설정
src/main/java 이하 경로를 기준으로 입력

public class HikariMyBatisConnector implements MyBatisSessionConnector {
	private static SqlSessionFactory sqlSessionFactory;
	private final HikariDataSource dataSource;
	public HikariMyBatisConnector(
		String mappersPackage,
		String aliasPackage
	) {
		// 인터페이스에 정의된 접속정보 필드를 기반으로 Connection Pool 생성
		HikariConfig hikariConfig = new HikariConfig();
		hikariConfig.setDriverClassName(DRIVER);
		hikariConfig.setJdbcUrl(URL);
		hikariConfig.setUsername(USERNAME);
		hikariConfig.setPassword(PASSWORD);
		dataSource = new HikariDataSource(hikariConfig);
		Environment prod = new Environment(
			"prod",
			new JdbcTransactionFactory(),
			dataSource
		);
		// Configuration Java Bean 생성
		Configuration configuration = new Configuration(prod);
		// 별칭을 부여함으로써 MemberMapper.xml의 SQL구문의 ReturnType을 정의할 수 있도록 설정
		TypeAliasRegistry typeAliasRegistry = configuration.getTypeAliasRegistry();
		typeAliasRegistry.registerAliases(aliasPackage);
		// Camel Case -> Snake Case 변환
		configuration.setMapUnderscoreToCamelCase(true);
		// Mapper 인터페이스 디렉토리 등록
		configuration.addMappers(mappersPackage);
		sqlSessionFactory = new SqlSessionFactoryBuilder().build(configuration);
	}
	@Override
	public SqlSession openSession() {
		return sqlSessionFactory.openSession();
	}
	@Override
	public SqlSession openSession(boolean autoCommit) {
		return sqlSessionFactory.openSession(autoCommit);
	}
}
  • Mapper.xml 파일SQL매핑태그에서 Java ClassReturn Type으로 설정
    Java Bean을 통해 생성한 Configuration 객체에서 TypeAliasRegistry를 추출 후 반환 Type에 해당하는 도메인 Class디렉토리 경로를 입력
    ▶ 설정된 디렉토리에 존재하는 모든 Class Type으로 SQL매핑태그에서 반환 받을 수 있음

    。이를 통해 MyBatis에서 Java Class Type 객체Return 받을 수 있음.
  // domain 디렉토리 이하 모든 Class Type으로 반환받을 수 있음
String aliasPackage = "com.uos.mybatis.domain"; 
TypeAliasRegistry typeAliasRegistry = configuration.getTypeAliasRegistry();
typeAliasRegistry.registerAliases(aliasPackage);
  • MyBatisPooled Connetion Pool을 사용하도록 설정하기
    HikariCP를 생성하는 코드를 다음으로 교체
PooledDataSource pooledDataSource = new PooledDataSource();
		pooledDataSource.setDriver(DRIVER);
		pooledDataSource.setUrl(URL);
		pooledDataSource.setUsername(USERNAME);
		pooledDataSource.setPassword(PASSWORD);

Hikari Connection Pool을 통해 SqlSession 생성 및 활용

  • Entity 설정하기
    。해당 Entity 디렉토리 경로TypeAliasRegistry에 등록되어 식별
  • Mapper 인터페이스 설정하기
 public interface MemberMapper {
	List<MemberDto> findAll();
	Optional<Member> findById(Long id);
}
  • Mapper.xml파일 설정하기
  
profile
공부기록 블로그

0개의 댓글