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 |
댓글