2020-12-21

jsbak·2020년 12월 21일
0

이번주
1. 프레임워크 2개
my batis
2. 하이버 네이트??

3.EL

  1. JSTL
    어떻게 커스텀 태그를 이용해서 더 쉽게 페이지를 만들것인가

오늘 페이징과 검색기능

사용자가 일반 유저가 아니라 관리자다 생각하고
탑메뉴??

실무가면 아키텍처 구조나 레이어를 그리고 나서 생각해보기

프레임워크의 이름을 찾아보면 ~하는 녀석을 알아 볼 수 있다.

hybernate Domain-layer에 적용

벨리데이터 프레임워크 정의?
검증을 Domain-layer에서?
Spring 전체영역 다지원
-> Enterprise framework

회원 목록 조회

페이징
스크린 사이즈 (페이지당 몇개)
토탈 레코드 (전체 가져온것)
토탈 페이지 (전체 페이지)

1번째 알고리즘 - 토탈 레코드와 스크린 사이즈를 이용하여 토탈페이지 구하는 것

한구간안에 5페이지를 집어 넣는 것
블럭 사이즈
현재 클라이언트가 요구하는 페이지 (커런트 페이지)

스타트 페이지
맨 마지막 앤드 페이지

커런트 페이지 7 이면 스타트 6
커런트 페이지 9 이면 스타트 6
커런트 페이지 7 이면 앤드 10
커런트 페이지 6 이면 앤드 10

커런트 페이지에 따라서 스타트와, 앤드가 달라진다.

2 번째 스크린 사이즈와 커런트 페이지를 가지고
스타트페이지, 엔드 페이지 찾는 것

스타트 로우

3 번째 커런트 페이지와 스크린 사이즈 를 알면
스타트, 앤드 로우 알고리즘

  1. 총 페이지 구하기
    총 페이지 = 총게시글 수/한 페이지당 리스트 수
    totalPage = (totalRecord+(screenSize-1))/screenSize

  2. 시작, 종료 페이지 구하기
    시작 페이지 = (현재페이지/스크린사이즈) 블럭사이즈 + 1
    startPage = (currentPage/BlockSize) X BlockSize + 1
    종료 페이지 = (현재페이지/블럭사이즈)
    BlockSize + 블럭사이즈 or 시작페이지 + (블럭사이즈 - 1)
    endPage = (currentPage/BlockSize) X 5 + BlockSize or startPage + BlockSize - 1

  3. 스타트, 앤드 로우 구하기
    스타트 로우 구하기 = (현재 페이지-1) 10 + 1
    startRow = (currnetPage-1)
    10 + 1
    앤드 로우 구하기 = 현재 페이지 10 or 스타트 로우 + (스크린 사이즈 - 1)
    endRow = currentPage
    10 or startRow + screanSize - 1

select rownum, member.mem_id
from member;

-- 1번 부터 10번까지 1페이지 , 한 사이즈에
select rownum, member.mem_id
from member
where rownum >= 1 and rownum <=10;

-- 의사 컬럼, 실시간으로 동적으로 만들어지는 컬럼
-- rownum을 사용해야 만들어지는데 이것을 여기서 조회하는데 제일 마지막에 실행된다.
-- 따라서 아직 만들어지지 않은 데이터를 사용하려고 했다.
-- 의사컬럼의 rownum을 진짜 컬럼 처럼 만들어 줘야한다.
-- inlineView를 사용해서 중첩 쿼리를 만들어 준다.
select rownum, member.mem_id
from member
where rownum >= 11 and rownum <= 20;

select a.* 
from (
select rownum rnum, member.mem_id
from member
) a
where rnum >= 11 and rnum <= 20;

-- inline 쿼리를 이용해서 정렬를 하여 역순으로 조회(최신순)
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
) b
where rnum >= 11 and rnum <= 20;    -- 7

현재 페이지
요청을 제일 먼저 잡는 것이 Controller이니까 거기서 결정

검색
이름, 지역, 전체

INSTR 함수

INSTR('비교할 대상', '비교하고자하는 값', 비교를 시작할 위치, 검색된 결과의 순번)
https://joke00.tistory.com/97

코드 플레그먼트? 코드 스니핏?스니킷?

페이지를 넘기던 검색을 하던, 검색 했던 내용을 가지고 3가지 파라미터를 다 넘겨야한다.
3개의 파라미터를 넘기는 구조를 만들어준다.
검색 form 을 이용해서

검색 조건과 검색 페이지가 유지 된다??
페이지를 넘겼을때 검색 조건이 유지?
입력 표시 UI가 하나??
입력 받을 때의 UI와 서버로 넘기기 위한 UI 분할

mybatis

https://mybatis.org/mybatis-3/ko/index.html

XML에서 SqlSessionFactory 빌드하기

mybatis 커넥션 풀링

<dataSource type="POOLED">
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
  <environments default="development">
    <environment id="development">
      <transactionManager type="JDBC"/>
      <dataSource type="POOLED">
        <property name="driver" value="${driver}"/>
        <property name="url" value="${url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
      </dataSource>
    </environment>
  </environments>
  <mappers>
    <mapper resource="org/mybatis/example/BlogMapper.xml"/>
  </mappers>
</configuration>

우리의 전자 정부 플레임 워크에는 이미 존재

configuration.xml 생성



configuration에서 TypeAlias를 지정한다. (범용성), 단 일일이 등록해야한다.

<typeAliases>
	<package name="kr.or.ddit.vo"/>
	</typeAliases>

다 자기 클래스 이름으로 Alias가 잡힌다.

SQLsession?
sqlsession factory
어플리케이션 전체를 통틀어서 싱글턴
sqlsession(DB에서는 통로, 웹에서는 시간)

  • open, close하는 용도

Mapper Proxy?

mybatis는 언체크드의 펄시스턴스 익셉션을 sql익셉션을 받아서 내부적으로 변경함.

ibatis에서는 null값을 알아서 ""로 바뀌어서 들어가거나 ""이 null로 들어간다.
mybatis에서는 안되서 null처리해야한다.
null을 집어 넣을때도 char의 null인지 varchar의 널인지 지정하지 않아서 그렇다.

update 쿼리 실행 시
자동으로 롤백을한다.

동작 구조, IOC 패턴, DI패턴 (프레임워크와 라이브러리를 구분하는 핵심 키워드)

프레임워크가 대신 우리가 의존해야하는 녀석들을 만들어준다.


프레임워크를 사용하기 전에 이런 구조도를 살펴보자

ognl : Apache Commons OGNL - Object Graph Navigation Library
참고 : https://commons.apache.org/proper/commons-ognl/
프로퍼티를 탐색하는 방식에서 사용하는 라이브러리?
일종의 표현 언어 같은 녀석
내부적으로 ?? 연상배열로 쓸수 있다.

https://commons.apache.org/proper/commons-ognl/language-guide.html

@class@method(args)
이렇게 이용한다.

<if test="@org.apache.commons.lang3.StringUtils@isNotBlank(searchVO.searchWord)"></if>

Member와 Prod 테이블간에 1:N관계
MemberVO와 ProdVO -> 관계 1:N
has many 관계 => Member has many Prod

Prod와 Buyer 테이블 간의 관계 1:1관계
has a 관계 => Prod has a Buyer
has many 관계 => Buyer has many Prod
ORM이용하려면 도메인의 관계를 제대로 정의해야한다.

jsp에서 꺼내는 코드만 바꾸면된다. xml말구 바꿀게 없음

profile
끄적끄적 쓰는곳

0개의 댓글