본문 바로가기
Tech/Spring

JPA와 mybatis 병행을 위한 설정

by Augustine™ 2018. 10. 19.
반응형

JPA와 mybatis 병행을 위한 설정


새로 진행해야 할 프로젝트에서 기존 사용해왔던 ORM Framework인 JPA를 그대로 이용하려 하였으나, JPA(hibernate)에 익숙하지 않은 개발자를 위해서, mybatis framework 와 병행해서 개발하기로 했다.

별거 아니겠지 하고 설정했는데 제법 시간이 걸렸다. 

현재 사용하고 있는 Spring 설정은 .xml 이 아닌 java 파일로 설정을 대신하였다. 요즘 이게 트랜드이기도 하지만, 이렇게  Spring 설정을 xml 대신 java 파일로 설정하면 다음과 같은 유익한 점이 있다. 

첫 번째로, IDE Tool의 자동완성 기능을 사용할 수 있다. 두 번째로, Debugging mode를 이용할 수 있다. 

이전까지 xml 로 mybatis 설정을 해온터라, 현재 설정한 jpa에 mybatis를 병행해서 쓰기 위해서 googling 하는 시간이 필요했다.


@Configuration
@EnableWebMvc
@EnableJpaRepositories(basePackages="kr.co.lsware.jpa.repository")
@ComponentScan(basePackages="kr.co.lsware")
@EnableTransactionManagement
@EnableCaching
@EnableScheduling
@EnableAsync
@MapperScan("kr.co.lsware.mybatis")
@PropertySources({
  @PropertySource("classpath:${APP_ENV:DEV}.security.properties"),
  @PropertySource("classpath:${APP_ENV:DEV}.setting.properties")
})
public class RootAndWebConfig extends WebMvcConfigurerAdapter {


SpringContext.xml 을 대신해서, WebMvcConfigurerAdapter을 상속한 클래스를 만들었다. 이 클래스가 SpringContext 역할을 대신하고 있다.

@MapperScan 어노테이션에 Scan해야할 mapper interface를 입력한다. 

참고로 내가 사용하고 있는 패키지 구조는 다음과 같다.


 


그 다음 dataSource Bean 을 만든다. 이미 JPA에서 사용하고 있으므로, 별도의 dbms를 사용하는 것이 아닌 이상 jpa에서 사용하고 있는 것을 그대로 이용한다.

참고로 다음은 현재 설정한 datasource 설정이다.


@Bean(destroyMethod="close") public DataSource dataSource(){ BasicDataSource dataSource = new BasicDataSource(); dataSource.setDriverClassName(env.getProperty("datasource.jdbc.driver")); if(Boolean.valueOf(env.getProperty("datasource.jdbc.encrypt", "true"))){ AES256Utils cryptUtil = new AES256Utils("WebConfigEncrypt"); dataSource.setUrl(cryptUtil.aesDecode(env.getProperty("datasource.jdbc.encrypt.url"))); dataSource.setUsername(cryptUtil.aesDecode(env.getProperty("datasource.jdbc.encrypt.username"))); dataSource.setPassword(cryptUtil.aesDecode(env.getProperty("datasource.jdbc.encrypt.password"))); }else{ dataSource.setUrl(env.getProperty("datasource.jdbc.url")); dataSource.setUsername(env.getProperty("datasource.jdbc.username")); dataSource.setPassword(env.getProperty("datasource.jdbc.password")); } dataSource.setDefaultAutoCommit(Boolean.valueOf(env.getProperty("datasource.jdbc.autocommit", "true"))); dataSource.setValidationQuery(env.getProperty("datasource.jdbc.validate.query", "SELECT 1 FROM DUAL")); dataSource.setValidationQueryTimeout(Integer.valueOf(env.getProperty("datasource.jdbc.validate.timeout", "600000"))); dataSource.setTestWhileIdle(Boolean.valueOf(env.getProperty("datasource.jdbc.validate.testwiledidle", "true"))); return dataSource; }


mybatis 사용을 위해선 SqlSessionFactoryBean 이 필요하다.  아래는 기존에 xml 방식으로 설정한 SqlSessionFactoryBean 이다.


이것을 위에서 만든 RootAndWebConfig에서 Bean을 생성하도록 해야 한다. 아래와 같이 설정하면 된다.


    @Bean
    public SqlSessionFactoryBean sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] resources = resolver.getResources("classpath:kr/co/lsware/mybatis/*.xml");
        sessionFactory.setMapperLocations(resources);
        return sessionFactory;
    }


이것으로 설정은 끝났고, mapper.xml 에 직접 query 를 입력해서 결과를 불러보자.


 

반응형

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

2. Spring RabbitMQ  (0) 2020.02.11
1. Spring AMQP  (0) 2020.02.11
Spring Boot & H2 DB 를 이용한 CRUD 구현 - 1  (1) 2019.09.08
Spring Boot + Spring Security + OAuth2 을 이용한 Google SSO인증  (4) 2018.10.29
Maven - 부모, 자식 POM 예제  (0) 2018.07.04

댓글