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.* 속성은 적용되지 않는다.


  1. @Configuration
  2. @MapperScan("org.mybatis.spring.sample.mapper")
  3. @EnableTransactionManagement
  4. public class MybatisConfig {
  5. @Value("${spring.datasource.driver-class-name}")
  6. private String dbDriverClassName;
  7. @Value("${spring.datasource.url}")
  8. private String dbJdbcUrl;
  9. @Value("${spring.datasource.username}")
  10. private String dbUsername;
  11. @Value("${spring.datasource.password}")
  12. private String dbPassword;
  13. @SuppressWarnings("rawtypes")
  14. @Bean(name = "dataSource")
  15. public DataSource dataSource() {
  16. DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
  17. dataSourceBuilder.driverClassName(dbDriverClassName);
  18. dataSourceBuilder.url(dbJdbcUrl);
  19. dataSourceBuilder.username(dbUsername);
  20. dataSourceBuilder.password(dbPassword);
  21. return dataSourceBuilder.build();
  22. }
  23. @Bean
  24. public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
  25. final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
  26. sessionFactory.setDataSource(dataSource());
  27. PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
  28. sessionFactory.setMapperLocations(resolver.getResources("classpath:/mapper/**/*.xml"));
  29. return sessionFactory.getObject();
  30. }
  31. @Bean
  32. public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) throws Exception {
  33. final SqlSessionTemplate sqlSessionTemplate = new SqlSessionTemplate(sqlSessionFactory);
  34. return sqlSessionTemplate;
  35. }
  36. @Bean
  37. public DataSourceTransactionManager transactionManager(){
  38. DataSourceTransactionManager manager = new DataSourceTransactionManager(dataSource());
  39. return manager;
  40. }
  41. }


3. SqlRepository


Database Connection  을 위한 DataSource 설정이 2번에서 완료 되었다면 Spring에서 제공하는 sqlSessionFactory 클래스를 통해 Query 질의를 손쉽게 할 수가 있습니다.


  1. @Component
  2. public class SqlRepository {
  3. @Autowired
  4. @Resource(name="sqlSessionFactory")
  5. protected SqlSessionFactory sqlSessionFactory;
  6. @Autowired
  7. @Resource(name="sqlSessionTemplate")
  8. protected SqlSessionTemplate sqlSession;
  9. }


4. Test !!


테스트를 위한 java 파일입니다.


- controller 생성

BoardApplication.java


  1. @RestController
  2. public class BoardApplication {
  3. @Autowired
  4. private TestDAO testDAO;
  5. @RequestMapping("/test")
  6. public String test() {
  7. return testDAO.test();
  8. }
  9. }


TestDAO.java


  1. @Repository
  2. public class TestDAO extends SqlRepository {
  3. private final String nameSpace = "com.project.repository.TestDAO.";
  4. public String test() {
  5. return (String) this.sqlSession.selectOne(nameSpace + "testData", null);
  6. }
  7. }


TestMapper.xml

test 테이블을 미리 생성해 놓고 호출해야 해요!

저같은 경우에는 test 테이블에 테스트 용도의 데이터만 삽입해 놓았습니다.



  1. xml version="1.0" encoding="UTF-8"?>
  2. namespace="com.project.repository.TestDAO">
  3. id="testData" resultType="java.lang.String">
  4. select * from test



테스트 성공!! 

작성자 소개
초이 프로필
WrapUp 블로거

초이

반려견을 좋아하고, 차를 좋아하고, 여행을 좋아하고, 맛집을 찾아 즐기는 웹 개발자 입니다^^