https://mybatis.org/mybatis-3/ko/getting-started.html
https://getbootstrap.com/docs/5.0/components/pagination/
마이바티스 적용 datamapper
mybatis Data Mapper Framework
mybatis에서는
namespace는 필수
type alias는 configuration.xml에서만 등록 가능
sqlsession이 sqlMapClient의 역할
@class@method(args)
IOC / DI 패턴
테이블 조인시
조인 테이블 따로 담을 VO가 있어야 한다
MEMBER 1 : N PROD => hasmany
- 한명의 회원이 그동안 구매한 상품목록
- 1:N 은 hasmany 관계
- 이 관계를 위해서 MemberVO에 List ProdVO 추가
- collection 사용 바인딩 추가
PROD 1 : 1 BUYER => has a- ProdVO안에 BuyerVO가 하나 들어있음
- Prod has a Buyer
- association 사용하여 resultMap 바인딩
startrow = (totalRow+9)/screensize
endrow
startpage = 5*((c.p-1)/5)+1
endpage
페이징처리 도중
클라이언트가 2페이지가 필요하면
11번부터 20번 게시물이 필요하다
select rownum, member.mem_id
from member
where rownum >=1 and rownum <=10;
실행하면 결과가 잘 나오지만
select rownum, member.mem_id
from member
where rownum >=11 and rownum <=20;
결과가 나오지 않는다
- FROM : SQL은 구문이 들어오면 테이블을 가장 먼저 확인
- WHERE : 테이블명을 확인했으니, 테이블에서 주어진 조건에 맞는 데이터들을 추출
- GORUPBY : 조건에 맞는 데이터가 추출되었으니, 공통적인 데이터들끼리
묶어 그룹을 만들어준다- HAVING : 공통적인 데이터들이 묶여진 그룹 중, 주어진 조건에 맞는
그룹들을 추출- SELECT : 최종적으로 추출된 데이터들을 조회
- ORDER BY : 추출된 데이터들을 정렬해준다.
SELECT 다음으로 오는 구문은 ORDER BY 뿐이므로, SELECT 에서
만들어진 Alias는 ORDER BY 구문에서만 사용 가능
select b.* --8
from --6
(
select rownum rnum, a.* --5
from( --4
select member.mem_id --2
from member -- 젤먼저실행1
order by rowid desc--3
) a --a라는 인라인뷰
) b
where rnum >=11 and rnum <=20; --7
11~20 번까지 잘 나온다
PROD칼럼들과 유형이 나오는데
PROD_DETAIL이 CLOB이다.
CLOB 이란?
사이즈가 큰 데이터를 외부 파일로 저장하기 위한 데이터 타입
문자열 데이터를 DB 외부에 저장하기 위한 타입
테이블 중 CART와 MEMBER는 CLOB이 없어서
중복제거를 할 수 있다.
아래쿼리는 a001의 기본데이터(이름, 휴대폰번호, 이메일)와
그동안 구매한 상품의 목록을 함께 조회 단 중복제거
WITH CARTB AS(
SELECT DISTINCT CART_MEMBER, CART_PROD
FROM CART
)
SELECT MEM_ID, MEM_HP, MEM_MAIL, C.*
FROM MEMBER A LEFT OUTER JOIN CARTB B ON (MEM_ID = CART_MEMBER)
LEFT OUTER JOIN PROD C ON (CART_PROD = PROD_ID)
WHERE MEM_ID = 'a001';