본문 바로가기

Web/Spring

Spring boot에서 mybatis mapper location 설정

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
반응형

'Web > Spring' 카테고리의 다른 글