이전에 공부한것 처럼 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());
}
출력 결과이다.
아래 사이트에서 좀 더 공부하자!
'Spring > 코드로 배우는 스프링 웹 프로젝트' 카테고리의 다른 글
컨트롤러 파라미터 수집하기 (0) | 2021.02.23 |
---|---|
log4jdbc-log4j2 및 로고 레벨 설정 (0) | 2021.02.23 |
마이 바티스 사용하기 (0) | 2021.02.22 |
커넥션 풀 설정하기 (0) | 2021.02.22 |
Oracle Sql Developer 설정하기 (0) | 2021.02.22 |