Web/Spring

Spring boot에서 mybatis mapper location 설정

TheCar 2022. 10. 25. 10:14
728x90
반응형

아이디어가 생기면 언제든 개발에 들어가기 위해 간단한 테스트 프로젝트를 기본 셋팅을 해보는데...

셋팅 중에 '내가 정말 지금까지 Spring boot를 제대로 사용하지 못했구나'라고 생각들게 한 정보가 있어 공유해보려 한다.

 

지금까지 본인은 새로운 Spring boot 프로젝트를 셋팅할 때 mybatis를 사용했는데

mybatis를 사용하려면 프로젝트 내에 mapper 파일 위치를 셋팅을 해줘야한다.

 

헌데 지금까지 본인은 mapper 위치를 등록하기 위해서 TransactionConfig.java 파일을 생성해서

@Bean
public SqlSessionFactory mainMybatisSqlSessionFactory(
      @Qualifier("mainDataSource") DataSource mainDataSource,
      ApplicationContext applicationContext) throws Exception {
   SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
   sqlSessionFactoryBean.setDataSource(mainDataSource);
   sqlSessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:com/thecar/testproject/**/*.xml"));
   Resource myBatisConfig = new PathMatchingResourcePatternResolver().getResource("classpath:mybatis-config.xml");       // mybatis - camel로 그대로 가져오기
   sqlSessionFactoryBean.setConfigLocation(myBatisConfig);
   SqlSessionFactory sqlSessionFactory = sqlSessionFactoryBean.getObject();
   // sqlSessionFactory.getConfiguration().setCallSettersOnNulls(true);

   return sqlSessionFactoryBean.getObject();
}

위 코드에서

sqlsessionFactoryBean.setMapperLocations(applicationContext.getResources("classpath:com/thecar/testproject/**/*.xml"));

 

이렇게 Bean을 등록함으로써 프로젝트가 빌드가 될 시에 mapper의 위치를 bean으로 등록 하고있었는데...

 

정말 멍청했다...

 

이제 더 현명한 방법으로 mapper의 위치를 등록하는 방법을 알아보자.

 

우선 본인의 프로젝트는 maven 프로젝트이다.

 

pom.xml로 이동하여 mybatis-spring-boot-starter 를 dependency 시켜준다.

(만약 프로젝트 생성시에 mybatis를 선택했다면 이미 dependency가 존재할 수도 있다.)

(pom.xml을 수정했다면 maven update는 습관처럼 하자)

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.2.0</version>
</dependency>

 

이후 application-properties 파일로 와서 

mybatis.mapper-location=classpath:com/thecar/testproject/**/*.xml

이와 같은 딱 한줄이면 프로젝트 내에 mapper 파일의 위치를 등록할 수 있다.

(위치는 본인 프로젝트에 맞게)

 

이렇게하면 com/thecar/testproject 아래에 있는 패키지에 모든 .xml 파일들을 mapper로 인식하겠다는 얘기다.

 

왜 지금까지 이렇게 간단한걸 복잡하게 하고있었을까 생각해보면 회사에서 매번 새로운 프로젝트를 만들때 기존에 만들어진 프로젝트를 그대로 가져와서 시작했기 때문인 거 같다.

 

애초에 create new project를 해본 기억이 별로 없다.

 

앞으론 새로운 프로젝트에 들어갈 때 왠만하면 create new project를 해서 하나하나 해당 프로젝트에 맞는 셋팅을 하고 개발을 해야겠다.

728x90
반응형