Spring 개발환경 설정하기(4) - Spring + MyBatis 설계(Mapper, DAO)
2017년 3월 7일
Spring 개발환경 설정하기(1) - 프로젝트 생성하기~톰캣 설정
Spring 개발환경 설정하기(2) - 라이브러리 다운로드~DB연동
Spring 개발환경 설정하기(3) - Spring+MyBatis 연동하기
XML을 이용하여 간단한 SQL문을 작성하고, DAO에서 이를 호출하는 방식을 사용합니다.
1. src/main/resources에 mappers 폴더를 생성하고, timeMapper.xml 파일을 만듭니다.
2. timeMapper.xml에 DTD를 추가하고 SQL문을 작성합니다.
테스트 목적으로 만드는 Mapper이기 때문에 간단하게 현재 날짜와 시간을 출력하는 SQL문을 사용합니다.
<?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"> | cs |
<mapper namespace="com.lsy0318.mapper.TimeMapper"> <select id="getTime" resultType="java.lang.String"> select sysdate() </select> </mapper> | cs |
XML Mapper에서 namespace는 mapper들을 구분하는 식별자로 매우 중요합니다.
클래스에서는 패키지와 같은 역할로 MyBatis 내에서 원하는 SQL문을 찾아서 실행할 때 동작합니다.
위의 코드는 com.lsy0318.mapper.TimeMapper 네임스페이스에서 getTime 매핑 구문을 정의하고 있습니다.
이는 DAO에서 com.lsy0318.mapper.TimeMapper.getTime 형태로 실제 명시하게 됩니다.
3. root-context.xml의 sqlSessionFactory bean에 아래의 코드를 추가합니다.
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property> | cs |
mappers 폴더 내부에 있는, 파일의 이름이 Mapper.xml로 끝나는 파일을 자동으로 인식하도록 설정해주는 코드입니다.
4. src/main/java 폴더에 persistence 패키지를 생성하고 TimeDAO 인터페이스를 만듭니다.
public interface TimeDAO { public String getTime(); } | cs |
5. TimeDAO의 구현 클래스로 TimeDAOImpl 클래스를 만듭니다.
@Repository public class TimeDAOImpl implements TimeDAO { @Inject private SqlSession sqlSession; private static final String NAMESPACE = "com.lsy0318.mapper.TimeMapper."; @Override public String getTime() { return sqlSession.selectOne(NAMESPACE + "getTime"); } } | cs |
@Repository는 특정 클래스를 DAO로 표시하여 해당 역할을 명확히 해주는 주석입니다.
6. persistence 패키지를 Spring에 bean으로 등록합니다.
root-context.xml에 아래의 코드를 추가하면 Spring에서 persistence 패키지를 스캔하게 됩니다 :)
<context:component-scan base-package="com.lsy0318.persistence" /> | cs |
7. src/test/java 폴더에 있는 패키지에 TimeDAOTester 클래스를 만듭니다.
@RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = { "file:src/main/webapp/WEB-INF/spring/root-context.xml" }) public class TimeDAOTester { @Inject private TimeDAO dao; @Test public void testTime() throws Exception{ System.out.println(dao.getTime()); } } | cs |
JUnit Test를 실행하면 콘솔에 현재 날짜와 시간이 출력됩니다.
8. 기존의 컨트롤러를 이용하여 웹 화면에서 호출해봅니다.
@Controller public class HomeController { private static final Logger logger = LoggerFactory.getLogger(HomeController.class); @Inject private TimeDAO dao; @GetMapping("/") public String home(Model model) { logger.info("Welcome home!"); model.addAttribute("serverTime", dao.getTime()); return "home"; } } | cs |
서버를 켜고 http://localhost:8080/web에 접속하면 현재 날짜와 시간이 출력됩니다.
Tags:
Spring
Programming
1 개의 댓글
감사합니다~~~ 많은 도움이 됐어요!
답글삭제