Spring Boot + JDBC Driver 설정, Mybatis Datasource 연동하기
Spring Boot 프로젝트, JDBC Driver 설정 Mybatis Datasource 연결하기
Spring Boot 로 프로젝트를 생성하고 공부하면서 Mybatis 연동하기를 공유합니다.
기존에 SpringBoot 에서는 Tomcat-jdbc를 기본 DataSource로 제공했었지만 2.0부터 HikariCP가 기본으로 변경 되었어요.
HikariCP는 이전 버전에서도 많은 분들이 설정 변경을 통해 사용했을 정도로 인기가 많더라구요...
HikariCP는 다음 시간에.. 연동하고 공유해 보도록 하겠습니다.
Mybatis Datasource 정보 설정에 막히시는 분들은 참고해 보세요 ㅎ
1. application.properties
기본적으로 SpringBoot 2.0 버전부터는 default 설정으로 잡혀있기 때문에 spring.datasource 옵션을 그대로 사용하면 됩니다.
더 많은 설정값을 확인하고 싶다면 spring.datasource.* 의 옵션 설정을 확인하면서 진행하시면 됩니다!
2. MybatisConfig.java
Spring.datasource.* 설정이 DataSourcePorperties 에 전달되고 이를 통해 DataSource의 디폴트 구현체인 org.apache.tomcat.jdbc.pool.dataSource 클래스에 자동으로 설정된 것을 확인할 수 있습니다.
@EnableTransactionManagement 어노테이션은 @SpringBootApplication을 구성하는 요소 중 하나 입니다.
어노테이션을 살펴보면... 영어로 샬라샬라..
@Configuration : Indicates that a class declares one or more @Bean methods and may be processed by the Spring container to generate bean definitions and service requests for those
@EnableAutoConfiguration : Enable auto-configuration of the Spring Application Context
@ComponentScan : Provides support parallel with Spring XML’s element
DataSourceProperties는 Spring Boot에서 autoconfigure이 가능한 속성으로 별도의 DataSource를 구현하여 Bean을 등록했다면, application.properties 내의 spring.datasource.* 속성은 적용되지 않는다.
@Configuration
@MapperScan("org.mybatis.spring.sample.mapper")
@EnableTransactionManagement
public class MybatisConfig {
@Value("${spring.datasource.driver-class-name}")
private String dbDriverClassName;
@Value("${spring.datasource.url}")
private String dbJdbcUrl;
@Value("${spring.datasource.username}")
private String dbUsername;
@Value("${spring.datasource.password}")
private String dbPassword;
@SuppressWarnings("rawtypes")
@Bean(name = "dataSource")
public DataSource dataSource() {
DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
dataSourceBuilder.driverClassName(dbDriverClassName);
dataSourceBuilder.url(dbJdbcUrl);
dataSourceBuilder.username(dbUsername);
dataSourceBuilder.password(dbPassword);
return dataSourceBuilder.build();
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("classpath:/mapper/**/*.xml"));
return sessionFactory.getObject();
}
@Bean
public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
return sqlSessionTemplate;
}
@Bean
public DataSourceTransactionManager transactionManager(){
DataSourceTransactionManager manager = new DataSourceTransactionManager(dataSource());
return manager;
}
}
3. SqlRepository
Database Connection 을 위한 DataSource 설정이 2번에서 완료 되었다면 Spring에서 제공하는 sqlSessionFactory 클래스를 통해 Query 질의를 손쉽게 할 수가 있습니다.
@Component
public class SqlRepository {
@Autowired
@Resource(name="sqlSessionFactory")
protected SqlSessionFactory sqlSessionFactory;
@Autowired
@Resource(name="sqlSessionTemplate")
protected SqlSessionTemplate sqlSession;
}
4. Test !!
테스트를 위한 java 파일입니다.
- controller 생성
BoardApplication.java
@RestController
public class BoardApplication {
@Autowired
private TestDAO testDAO;
@RequestMapping("/test")
public String test() {
return testDAO.test();
}
}
TestDAO.java
@Repository
public class TestDAO extends SqlRepository {
private final String nameSpace = "com.project.repository.TestDAO.";
public String test() {
return (String) this.sqlSession.selectOne(nameSpace + "testData", null);
}
}
TestMapper.xml
test 테이블을 미리 생성해 놓고 호출해야 해요!
저같은 경우에는 test 테이블에 테스트 용도의 데이터만 삽입해 놓았습니다.
xml version="1.0" encoding="UTF-8"?>
namespace="com.project.repository.TestDAO">
select * from test
테스트 성공!!