JSP 23. Mybatis & 페이징 & Member검색

zhyun·2020년 12월 21일
0

JspSpring

목록 보기
28/39

2020.12.21. 월요일

프레임워크2개

  • Mybatis
  • Hibernate validator

태그 , 스크립트 언어

  • EL
  • JSTL

https://mybatis.org/mybatis-3/ko/getting-started.html

https://getbootstrap.com/docs/5.0/components/pagination/

1시 30분 수업

마이바티스 적용 datamapper

mybatis

mybatis Data Mapper Framework

  • ibatis 버전업그뤠이드
  • ibatis나 mybatis 모두 다 내부적으로 jdbc프로그래밍
  • classloader로 리소스 읽기때문에
    clsspath형태로 resource를 관리
  • ORM(Object Relational Mapping)에 비해 쉽고 가벼움

    • resource 밑에 db config XML Mapper 이용
  • mybatis는 내부적으로 sqlexception을 persistence exception으로 바꾼다.
    persistence는 unchecked exception이다

    mybatis에서는
    namespace는 필수
    type alias는 configuration.xml에서만 등록 가능
    sqlsession이 sqlMapClient의 역할

ibatis vs mybatis

sqlsessionfactory = 어플리케이션 통틀어 싱글톤

session = 커넥션 1개

OGNL

  • 일종의 언어표현
  • 내부적으로 스크립트 언어 형태여서 객체 접근할때 연상배열로도 접근 가능
  • StringUtils의 static method 사용
    • static 호출 방법 @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

페이징 처리

oracle

rownum : 의사컬럼, Pesudo Column

  • 진짜 컬럼이 아닌데 컬럼처럼 행동하는 요소
  • 행번호 의사컬럼(현재행의 순서를 반환 의사컬럼)
  • 오라클 전용
  • 서브쿼리를 잘하면 사용하기 쉬움
  • 실시간 동적으로 만들어주는 컬럼이다
  • 아직 만들어지지 않는 데이터를 만드는거와 똑같다

페이징처리 도중
클라이언트가 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;

결과가 나오지 않는다

오라클 쿼리 실행 순서

  1. FROM : SQL은 구문이 들어오면 테이블을 가장 먼저 확인
  2. WHERE : 테이블명을 확인했으니, 테이블에서 주어진 조건에 맞는 데이터들을 추출
  3. GORUPBY : 조건에 맞는 데이터가 추출되었으니, 공통적인 데이터들끼리
    묶어 그룹을 만들어준다
  4. HAVING : 공통적인 데이터들이 묶여진 그룹 중, 주어진 조건에 맞는
    그룹들을 추출
  5. SELECT : 최종적으로 추출된 데이터들을 조회
  6. ORDER BY : 추출된 데이터들을 정렬해준다.
    SELECT 다음으로 오는 구문은 ORDER BY 뿐이므로, SELECT 에서
    만들어진 Alias는 ORDER BY 구문에서만 사용 가능

ROWNUM 사용시 인라인뷰 활용⭐

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';

profile
HI :)

0개의 댓글