스프링 30강 - 스프링 폼 태그 라이브러리, Dao 대신 Mapper interface 활용하기

스프링 폼 태그 라이브러리

  1. 스프링 폼 태그란?
  • HTML 폼을 표시하기 위한 태그 라이브러리
  • 스프링 폼을 사용하면 HTML 폼과 자바 객체를 쉽게 바인딩(= 서로 공유) 할 수 있음
  1. 선언은?
  1. 태그 목록은?
  • <form:password> : 패스워드 필드
  • <form:form> : 폼
  • <form:input path="test"> 테스트 필드. id="test" name="test"
  • <form:textarea> : 텍스트 영역
  • <form:checkboxes> : 여러 개 체크박스
  • <form:checkbox> : 체크박스
  • <form:radiobuttons> : 여러 개의 라디오 버튼
  • <form:radiobutton> : 라디오 버튼
  • <form:select> : 셀렉트 박스
  • <form:hidden> : 숨겨진 필드
  • <form:label> : 라벨
  • <form:button> : 버튼
  • <form:errors> : 입력값 검증 오류 표시(validate)

DAO 클래스 대신 Mapper 인터페이스 활용해서 처리

Mapper 인터페이스란?

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

Mapper 사용하지 않았을 시?

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

Mapper 사용했을 때

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

Mapper 인터페이스 작성

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

설정

  1. pom.xml에 mybatis, springframework, ojdbc6 등 라이브러리가 있는지 확인
  2. root-context.xml 추가
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<property name="basePackage" value="kr.or.ddit.*.mapper" />
	</bean>
</beans>
  • 개발자가 직접 DAO를 설정하지 않아도 자동으로 Mapper 인터페이스를 활용하는 객체를 생성함
  • 소스마다 설정하지 않고 자동으로 경로를 설정해서 인식시킬 수 있음
  • MapperScannerConfigurer : "kr.or.ddit.*.mapper"에 있는 매퍼클래스를 스캐닝할거다!
  1. Mapper가 될 Interface 만들기
  2. SQL.xml의 namespace 바꾸기
  3. ServiceImpl에서 dao 걷어내고 Mapper로 연결
  4. mybatisAlias.xml 수정

예시

Lprod 시리즈 정리하기

  1. kr.or.ddit 폴더에 lprod 폴더 만들기
  2. controller, dao, mapper, service, vo 폴더 각각 만들고, Mapper interface 만들어서 추가

LprodMapper.java

package kr.or.ddit.lprod.mapper;

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

import kr.or.ddit.BuyerVO;
import kr.or.ddit.lprod.vo.LprodVO;
import kr.or.ddit.member.vo.MemberVO;

public interface LprodMapper {
	//상품분류 별 거래처 목록
	public List<LprodVO> list(Map<String, Object> map);
	
	//상품분류 별 거래처 목록 행의 수
	public int listCount(Map<String, Object> map);
	
	//거래처 상세 정보
	public BuyerVO detail(String buyerId);
	
	//거래처 수정
	public int modify(BuyerVO buyerVO);
	
	//로그인
	public MemberVO login(MemberVO memberVO);
	
}
  1. SQL.xml의 namespace 바꾸기
    namespace="매퍼 클래스가 있는 패키지명.매퍼클래스명"
<mapper namespace="kr.or.ddit.lprod.mapper.LprodMapper">
  1. ServiceImpl에서 dao 걷어내고 Mapper로 연결

LprodServiceImpl.java

package kr.or.ddit.lprod.service.impl;

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

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import kr.or.ddit.BuyerVO;
import kr.or.ddit.lprod.mapper.LprodMapper;
import kr.or.ddit.lprod.service.LprodService;
import kr.or.ddit.lprod.vo.LprodVO;
import kr.or.ddit.member.vo.MemberVO;

@Service
public class LprodServiceImpl implements LprodService {
	@Autowired
	//LprodDao lprodDao; 이제 dao안쓴다.
	private LprodMapper 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 login(MemberVO memberVO) {
		//this 생략 가능
		return lprodMapper.login(memberVO);
	}
}
  1. mybatisAlias.xml 수정
<typeAlias type="kr.or.ddit.lprod.vo.LprodVO" alias="lprodVO"/>

좋은 웹페이지 즐겨찾기