이전에 공부한것 처럼 SqlSessionFactory를 사용해서 Connection을 얻어 jdbc코딩이 가능하다. 

하지만 좀 더 편하게 작업하기 위해서 sql문을 위한 설정을 분리해주는게 낫다. 

이를 위해서 MyBatis에 Mapper를 작성해줘야한다.

 

mybatis-spring을 이용하는 경우 mapper를 xml과 인터페이스 + 어노테이션 형태로 작성이 가능하다.

 

Mapper 설정하기 

 

pom.xml 설정하기

mybatis-spring를 사용하기 위해 Namespace에서 mybatis-spring을 체크해준다.

 

mybatis-spring이 스캐할 경로를 설정해준다.

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

 

 

Mapper 작성하기

 

1) interface로 Mapper 작성하기

 

interface클래스에는 @Sellect 어노테이션으로 sql문을 간단하게 작성해주면 된다.

package org.zerock.mapper;

import org.apache.ibatis.annotations.Select;

public interface TimeMapper {

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

 

작성된 인터페이스를 테스트해보겠다.

 

timeMapper인터페이스에 대한 구현체가 있어야 timeMapper.getClass().getName()에 적당한 클래스명이 출력될 것이다. 

@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/root-context.xml")
@Log4j
@RunWith(SpringJUnit4ClassRunner.class)
public class TimeMapperTest {
	@Autowired
	private TimeMapper timeMapper;
	
	@Test
	public void testGetTime() {
		log.info(timeMapper.getClass().getName());
		log.info(timeMapper.getTime());
	}
}

 

다음은 그 결과이다. 

정상적으로 출력이 된 것으로 보아 내부적으로 적당한 타입의 객체를 만든다는 것이다. 

 

 

 

2) XML로 Mapper 작성하기

 

위와 같이 어노테이션에 SQL문을 작성하는 방법이 더 간편하지만

SQL문이 복잡한 경우에는 XML파일에 작성하는 것이 더 좋다.

 

MyBatis-Spring은 인터페이스와 XML 동시에 이용이 가능하다.

(간단한 SQL은 인터페이스에 작성하고 복잡한 SQL문은 XML에 작성하자!)

 

 

이제 코드를 통해 사용방법을 알아보겠다.

 

 

위 예제에서 TimeMapper 인터페이스에 getTime2 메소드를 선언만 하자 

public interface TimeMapper {

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

 

mapper에 관한 xml파일을 다음 경로에 만들어 준다.

xml파일 이름은 인터페이스 이름과 일치해주면 가독성이 좋다.

 

 

TimeMapper.xml 코드

<?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.zerock.mapper.TimeMapper">
    	<select id="getTime2" resultType="string">
    	SELECT sysdate FROM dual
    	</select>
    </mapper>

 

 

코드 살펴보기

 

xml파일이 mybatis mapper를 사용한다는 의미에서 아래코드를 작성해줘야한다.

<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

 

org.zerock.mapper.TimeMapper인터페이스가 존재하고

XML의 namespace와 같은 이름이 존재하면 병합해서 처리한다.

-> 메소드는 인터페이스에서 선언하고, SQL에 대한 처리는 xml에서 한다.

<mapper namespace="org.zerock.mapper.TimeMapper">
</mapper>

 

 

테스트 코드이다.

	@Test
	public void testGetTime2() {
		log.info("getTime2");
		log.info(timeMapper.getTime2());
	}

 

 

출력 결과이다.

 

 

 

아래 사이트에서 좀 더 공부하자!

mybatis.org/mybatis-3/ko/sqlmap-xml.html

+ Recent posts