[Spring] Mapper
Mapper
- 매핑파일에 기재된 SQL을 호출하기 위한 인터페이스이다.
- Mybatis 3.0부터 생겼다.
- 매핑파일에 있는 SQL을 인터페이스로 호출한다.
Mapper 사용하지않았을시?
- session.selectOne("namespace.아이디", 파라미터); 형식 이였다.
- 네임스페이스+"."+SQL ID 로 지정해야한다.
- 문자열로 작성하기때문에 버그가 생길 수 있다.
- IDE에서 제공하는 code assist를 사용할 수 없다.
Mapper 사용했을때
- Mapper 인터페이스 개발자가 직접작성한다.
- 패키지 이름+"."+인터페이스이름+"."+메서드이름이 네임스페이스+"."+SQL의 ID를 설정해야 한다.
- 네임스페이스 속성에는 패키지를 포함한 Mapper 인터페이스 이름 형식이다.
- SQL ID 에는 매핑하는 메서드 이름을 지정하는 것.
Mapper 인터페이스 작성
반드시 인터페이스로 선언해주어야한다.
네임스페이스 명은 패키지포함 인터페이스이름으로 작성.
ex)
메서드명은 SQLID와 동일하게작성.
root-context
- 개발자가 직접 dao를 생성하지 않아도 자동으로 Mapper인터페이스를 활용하는 객체를 생성.
소스마다 설정하지 않고 자동으로 경로를 설정해서 인식시킬 수 있음
<!-- 개발자가 직접 dao를 생성하지 않아도 자동으로 Mapper인터페이스를 활용하는 객체를 생성.
소스마다 설정하지 않고 자동으로 경로를 설정해서 인식시킬 수 있음 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="kr.or.ddit.*.mapper"></property>
</bean>
mapper(interface)
package kr.or.ddit.mapper;
import java.util.List;
import java.util.Map;
import kr.or.ddit.BuyerVO;
import kr.or.ddit.LprodVO;
import kr.or.ddit.MemberVO;
public interface LprodMapper {
// 상품분류 별 거래처 목록
public List<LprodVO> lprodlist(Map<String, Object> map);
// 상품분류 별 거래처 목록 행의 수
public int listCount(Map<String,Object> map) ;
// 거래처 상세 정보
public BuyerVO detail(String buyerId) ;
// 거래처 수정
public int modify(BuyerVO buyerVO) ;
// 로그인
public MemberVO loginPost(MemberVO memberVO);
public List<LprodVO> list(Map<String, Object> map);
}
serviceImple - dao를 사용하지 않는다.
package kr.or.ddit;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class LprodServiceImpl implements LprodService {
@Autowired
private kr.or.ddit.mapper.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 loginPost(MemberVO memberVO) {
return lprodMapper.loginPost(memberVO);
}
}
mapper.xml에 namespace경로설정(alias도 바꿔주시궜어요)
<?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">
<mapper namespace="kr.or.ddit.mapper.LprodMapper">
<resultMap type="lprodVO" id="lprodMap">
<id property="lprodGu" column="LPROD_GU" />
<result property="rnum" column="RNUM" />
<result property="lprodNm" column="LPROD_NM" />
<collection property="buyerVO" resultMap="buyerMap"></collection>
</resultMap>
<resultMap type="buyerVO" id="buyerMap">
<id property="buyerId" column="BUYER_ID" />
<result property="buyerName" column="BUYER_NAME" />
<result property="buyerLgu" column="BUYER_LGU" />
</resultMap>
<!-- 상품분류 별 거래처 목록 -->
<!--
parameter :
{keyWord=캐주,currentPage=1,size=10}
-->
<select id="list" parameterType="hashMap" resultMap="lprodMap">
SELECT T.RNUM, T.LPROD_GU, T.LPROD_NM
, T.BUYER_ID, T.BUYER_NAME, T.BUYER_LGU
FROM
(
SELECT ROW_NUMBER() OVER(ORDER BY LPROD_NM, BUYER_ID) RNUM
, L.LPROD_GU
, L.LPROD_NM
, B.BUYER_ID
, B.BUYER_NAME
, B.BUYER_LGU
FROM LPROD L INNER JOIN BUYER B
ON(L.LPROD_GU = B.BUYER_LGU)
WHERE 1 = 1
<if test="keyWord!=null and keyWord!=''">
AND (L.LPROD_GU LIKE '%'||#{keyWord}||'%'
OR L.LPROD_NM LIKE '%'||#{keyWord}||'%'
OR B.BUYER_ID LIKE '%'||#{keyWord}||'%'
OR B.BUYER_NAME LIKE '%'||#{keyWord}||'%')
</if>
) T
WHERE T.RNUM BETWEEN #{currentPage}*7-6 AND #{currentPage}*7
</select>
<!-- 상품분류 별 거래처 목록의 totalCount -->
<select id="listCount" parameterType="hashMap" resultType="int">
SELECT COUNT(*)
FROM LPROD L INNER JOIN BUYER B
ON(L.LPROD_GU = B.BUYER_LGU)
WHERE 1 = 1
<if test="keyWord!=null and keyWord!=''">
AND (L.LPROD_GU LIKE '%'||#{keyWord}||'%'
OR L.LPROD_NM LIKE '%'||#{keyWord}||'%'
OR B.BUYER_ID LIKE '%'||#{keyWord}||'%'
OR B.BUYER_NAME LIKE '%'||#{keyWord}||'%')
</if>
</select>
<!-- 거래처 상세 정보 -->
<select id="detail" parameterType="String" resultType="buyerVO">
SELECT (SELECT L.LPROD_NM FROM LPROD L WHERE L.LPROD_GU = B.BUYER_LGU) LPROD_NM
, B.BUYER_ID
, B.BUYER_NAME
, B.BUYER_LGU
, B.BUYER_BANK
, B.BUYER_BANKNO
, B.BUYER_BANKNAME
, B.BUYER_ZIP
, B.BUYER_ADD1
, B.BUYER_ADD2
, B.BUYER_COMTEL
, B.BUYER_FAX
, B.BUYER_MAIL
, B.BUYER_CHARGER
, B.BUYER_TELEXT
, B.BUYER_IMG
FROM BUYER B
WHERE B.BUYER_ID = #{buyerId}
</select>
<!-- 거래처 수정 -->
<update id="modify" parameterType="buyerVO">
UPDATE BUYER
SET BUYER_MAIL = #{buyerMail}, BUYER_COMTEL = #{buyerComtel},
BUYER_CHARGER = #{buyerCharger}, BUYER_IMG = #{buyerImg}
WHERE BUYER_ID = #{buyerId}
</update>
<!-- 로그인
기본키의 2가지 특징. Not Null, 유일성/중복제거(no duplicate) -->
<select id="loginPost" parameterType="memberVO" resultType="memberVO">
SELECT MEMBERID,PASSWORD,NAME,EMAIL,REGDATE,INTRODUCTION,MEMBER_SERT_PIC
FROM MEMBER
WHERE MEMBERID = #{memberid}
AND PASSWORD = PKG_CRYPTO.ENCRYPT(#{password})
</select>
</mapper>
Author And Source
이 문제에 관하여([Spring] Mapper), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vgo_dongv/Spring-Mapper저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)