공부/프로그래밍

[Spring] Mybatis 사용하기 (mapper를 interface를 이용하여 호출)

demonic_ 2017. 4. 20. 14:50

Mapper namespace 와 ID를 연결할 Interface 를 두어서 interface를 호출하는 방법이다.


[Spring] Mybatis 에서 Mapper(매퍼) 연결하는 2가지 방법에 대한 선택 가이드.(링크)


마이바티스를 설정하는 것은 다음의 포스트를 참조

링크 : [Spring] Mybatis 설정하기 (기본설정)



바로 코딩을 보자.

이전에 Mybatis를 설정했던 파일(sqlSessionFactory 등을 설정했던 xml 파일)에서 다음의 것을 추가한다.


<!-- 

Mapper 스캔 

basePackage 를 이용해서 인터페이스 파일이 저장될 매퍼를 지정한다.

-->

<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">

<property name="basePackage" value="com.kr.test.mapper" />

</bean>


아래의 것은 매퍼파일의 내용이다. 

<?xml version="1.0" encoding="UTF-8" ?> 

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


<mapper namespace="com.kr.mapper.Test">

<select id="getTest" parameterType="java.util.HashMap" resultType="java.util.HashMap">

/* query */

</select>

</mapper>



basePackage로 설정한 패키지 위치에 'interface'를 생성한다.(클래스가 아니다)


package com.kr.mapper.;

// 매퍼의 namespace와는 경로를 맞추어야 한다. 

// com.kr.mapper의 패키지 안에 Test 라는 인터페이스를 생성한다.

// 매퍼 안에 select id의 값을 메소드로 만든다.

public interface Test {

// select id 가 'getTest' 인 매퍼를 이용하여 SQL 조회한다.

List getTest(Map paramMap) throws Exception;

}



Service 에서는 다음과 같이 사용하면 된다.


@Autowired

private Test test;


// getTest를 이용해 쿼리를 조회하는 샘플

public HashMap<String, Object> getTest(Map paramMap, ModelMap model) throws Exception {

HashMap<String, Object> resultMap = new HashMap<String, Object>();


List resultList = null;

// Test 라는 인터페이스를 통해 매퍼와 연결하여 조회

resultList = test.getTest(paramMap);


resultMap.put("resultList", resultList );

return resultMap;

}




이것의 장점은 sqlSession을 사용했을때의 메서드를 상황에 따라 직접 호출하면서 메서드 명을 알아야 하는데에 반해, 호출을 이용해 SQL을 실행시키기 때문에 sqlSession의 메서드를 몰라도 된다.