스프링 30강 - 스프링 폼 태그 라이브러리, Dao 대신 Mapper interface 활용하기
스프링 폼 태그 라이브러리
- 스프링 폼 태그란?
- HTML 폼을 표시하기 위한 태그 라이브러리
- 스프링 폼을 사용하면 HTML 폼과 자바 객체를 쉽게 바인딩(= 서로 공유) 할 수 있음
- 선언은?
- <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
- 태그 목록은?
- <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와 동일하게 작성한다.
설정
- pom.xml에 mybatis, springframework, ojdbc6 등 라이브러리가 있는지 확인
- 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"에 있는 매퍼클래스를 스캐닝할거다!
- Mapper가 될 Interface 만들기
- SQL.xml의 namespace 바꾸기
- ServiceImpl에서 dao 걷어내고 Mapper로 연결
- mybatisAlias.xml 수정
예시
Lprod 시리즈 정리하기
- kr.or.ddit 폴더에 lprod 폴더 만들기
- 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);
}
- SQL.xml의 namespace 바꾸기
namespace="매퍼 클래스가 있는 패키지명.매퍼클래스명"
<mapper namespace="kr.or.ddit.lprod.mapper.LprodMapper">
- 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);
}
}
- mybatisAlias.xml 수정
<typeAlias type="kr.or.ddit.lprod.vo.LprodVO" alias="lprodVO"/>
Author And Source
이 문제에 관하여(스프링 30강 - 스프링 폼 태그 라이브러리, Dao 대신 Mapper interface 활용하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@hazel_jo/스프링-30강-스프링-폼-태그-라이브러리-Dao-대신-Mapper인터페이스-활용-스프링-시큐리티저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)