[Spring] Mybatis - Mapper Interface

Mapper 인터페이스란?

  • 매핑 파일에 기재된 SQL을 호출하기 위한 인터페이스이다.
  • Mybatis 3.0부터 생겼다.
  • 매핑 파일에 있는 SQL을 인터페이스로 호출한다.

Mapper를 사용하지 않았을 시?

  • session.selectOne("namespace.아이디",파라미터); 형식이었다.
  • 네임스페이스+"."+SQL ID로 지정해야 한다.
  • 문자열로 작성하기 때문에 버그가 생길 수 있다.
  • IDE에서 제공하는 code assist를 사용할 수 없다.

Mapper를 사용했을 때

  • Mapper 인터페이스를 개발자가 직접 작성한다.
  • 패키지 이름+"."+인터페이스이름+"."+메서드이름이 네임스페이스+"."+SQL의 ID를 설정해야 한다.
  • 네임스페이스 속성에는 패키지를 포함한 Mapper 인터페이스 이름 형식이다.
  • SQL ID에는 매핑하는 메서드 이름을 지정하는 것.

Mapper 인터페이스 작성

  • 반드시 인터페이스로 선언해주어야 한다.
  • 네임스페이스명은 패키지 포함 인터페이스 이름으로 작성.
    ex)<mapper namespace="myspring.user.dao.UserMapper">
    메서드명은 SQLID와 동일하게작성.

1. root-context 설정

	 <!-- 개발자가 직접 DAO를 설정하지 않아도 자동으로 
	 Mapper 인터페이스를 활용하는 객체를 생성함
	 소스마다 설정하지 않고 자동으로 경로를 설정해서 인식시킬 수 있음 -->
	 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
	 	<property name="basePackage" value="kr.or.ddit.*"></property>
	 </bean>

2. Mapper가 될 Interface 생성

3. SQL.xml의 namespace 변경

<mapper namespace="kr.or.ddit.LprodMapper">

4. ServiceImpl을 Dao가 아닌 Mapper로 연결

package kr.or.ddit;

import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import kr.or.ddit.mapper.LprodMapper;

@Service
public class LprodServiceImpl implements LprodService {
	//DI
	@Autowired
	private LprodMapper lprodMapper;
//	LprodDao lprodDao; DAO가 LprodMapper로 변경됨
	
	//상품분류 별 거래처 목록
	@Override
	public List<LprodVO> list(Map<String, Object> map){
		return this.lprodMapper.list(map);
	}
	//상품분류 별 거래처 목록 행의 수
	@Override
	public int listCount(Map<String, Object> map) {
		return this.lprodMapper.listCount(map);
	}
	//거래처 상세 정보
	@Override
	public BuyerVO detail(String buyerId) {
		return this.lprodMapper.detail(buyerId);
	}
	//거래처 수정
	@Override
	public int modify(BuyerVO buyerVO) {
		return this.lprodMapper.modify(buyerVO);
	}
	//로그인 확인
	@Override
	public MemberVO checkLogin(MemberVO memberVO) {
		return this.lprodMapper.checkLogin(memberVO);
	}
}

좋은 웹페이지 즐겨찾기