본문 바로가기
Spring

Spring - MyBatis 연동

by skwzz 2019. 12. 13.

1. spring-jdbc / spring-tx / mybatis / mybatis-spring

   위 4가지 pom.xml에 추가

<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.4.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis-spring</artifactId>
    <version>1.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>${org.springframework-version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-tx -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-tx</artifactId>
    <version>${org.springframework-version}</version>
</dependency>

 

 

2. root-context.xml에 SqlSessionFactoryBean 등록

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
	<property name="dataSource" ref="dataSource"/>
</bean>

 

 

3. Mapper 인터페이스 작성 ( SampleMapper.java )

package org.skwzz.mapper;

import org.apache.ibatis.annotations.Select;

public interface SampleMapper {

	@Select("SELECT sysdate FROM dual")
	public String getTime();
}

일반적으로 쿼리는 xml 에 작성하지만 테스트 용으로 MyBatis의 어노테이션을 사용해 작성

테스트 후 변경할 예정

 

 

4. root-context.xml에 해당 mapper를 스캔 가능하게 설정

체크 후 밑의 코드 추가

<mybatis-spring:scan base-package="org.skwzz.mapper"/>

 

 

5. Mapper 테스트 클래스 작성 후 테스트 ( SampleMapperTests.java )

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class SampleMapperTests {

	@Setter(onMethod_ = {@Autowired})
	private SampleMapper sampleMapper;
	
	@Test
	public void testGetTime() {
		log.info(sampleMapper.getClass().getName());
		log.info(sampleMapper.getTime());
	}
}

테스트 결과

 

 

6. 연결 확인 됬으므로 XML Mapper 사용해보기

SampleMapper.java 인터페이스에 XML로 실행할 코드 작성

public interface SampleMapper {

	@Select("SELECT sysdate FROM dual")
	public String getTime();
	
	public String getTimeUseMapperXML();
}

SampleMapper.xml 파일을 생성할건데

1. Mapper Interface와 같은 위치에 생성

2. src/main/resources 에 폴더 생성 후 저장 ( 이걸로 진행함 )

- 2로 진행할 시 폴더를 한 번에 하나씩 저장.  한꺼번에 할 경우 제대로 인식이 되지 않는 문제가 있음

 

파일 생성 후

- mapper dtd 작성 ( LINK ) 들어가서 mapper.dtd로 검색하면 나오는 예제가 있음 복붙하면됨 

- mapper namespace 설정

- 쿼리 작성 (쿼리 작성시 세미콜론 붙이면 에러남)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
  
<mapper namespace="org.skwzz.mapper.SampleMapper">

  <select id="getTimeUseMapperXML" resultType="string">
    SELECT sysdate
    FROM dual
  </select>
  
</mapper>

 

신경써야 할 점

<mapper> 태그의 namespace 속성을 사용 할 Mapper 인터페이스와 동일하게 맞춰야함.

쿼리의 id값은 메소드의 이름과 동일해야함 

 

 

7.  테스트 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
public class SampleMapperTests {

	@Setter(onMethod_ = {@Autowired})
	private SampleMapper sampleMapper;
	
	@Ignore
	@Test
	public void testGetTime() {
		log.info(sampleMapper.getClass().getName());
		log.info(sampleMapper.getTime());
	}
	
	@Test
	public void testGetTimeUseMapperXMl() {
		log.info(sampleMapper.getTimeUseMapperXML());
	}
}

테스트 결과

 

'Spring' 카테고리의 다른 글

@ControllerAdvice를 사용한 Exception 처리  (0) 2019.12.13
Spring - Oracle 연결 테스트, CP 설정  (0) 2019.12.13