인터페이스 정의
。MyBatis의 Connection 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 openSession();
SqlSession openSession(boolean autoCommit);
}
HikariCP의 Connection 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
) {
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 configuration = new Configuration(prod);
TypeAliasRegistry typeAliasRegistry = configuration.getTypeAliasRegistry();
typeAliasRegistry.registerAliases(aliasPackage);
configuration.setMapUnderscoreToCamelCase(true);
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 Class를 Return Type으로 설정
。Java Bean을 통해 생성한 Configuration 객체에서 TypeAliasRegistry를 추출 후 반환 Type에 해당하는 도메인 Class의 디렉토리 경로를 입력
▶ 설정된 디렉토리에 존재하는 모든 Class Type으로 SQL매핑태그에서 반환 받을 수 있음
。이를 통해 MyBatis에서 Java Class Type 객체로 Return 받을 수 있음.
String aliasPackage = "com.uos.mybatis.domain";
TypeAliasRegistry typeAliasRegistry = configuration.getTypeAliasRegistry();
typeAliasRegistry.registerAliases(aliasPackage);
MyBatis의 Pooled Connetion Pool을 사용하도록 설정하기
。HikariCP를 생성하는 코드를 다음으로 교체
PooledDataSource pooledDataSource = new PooledDataSource();
pooledDataSource.setDriver(DRIVER);
pooledDataSource.setUrl(URL);
pooledDataSource.setUsername(USERNAME);
pooledDataSource.setPassword(PASSWORD);