Day29(미완)

두윤기·2023년 2월 8일
0

웹 관련 Scope 종류(Bean Scope)

  • pageScope
  • requestScope
    • 웹 요청이 들어오고 나갈 때까지 유지되는 Scope
  • sessionScope
    • 웹 session이 생성되고 종료될 때까지 유지되는 Scope
  • applicationScope
    • 웹의 servlet context와 같은 범위로 유지되는 Scope

SQL 함수

/*
    Function(함수)
    * 특정 기능을 실행하는 코드 집합
    * Java에서는 Method라고 부름
    * 단일행 함수, 집계함수, 분석함수로 구분
*/

-- ### > 단일행 함수
-- * 결과집합의 행마다 연산하는 함수

SELECT MEMBER_ID, UPPER(MEMBER_ID) AS 대문자 FROM MEMBER;
SELECT MEMBER_ID, LOWER(MEMBER_ID) AS 대문자 FROM MEMBER;

SELECT * FROM MEMBER WHERE INSTR(LOWER(MEMBER_ID), LOWER('kh')) > 0;

-- ### > 집계 함수
-- * 데이터를 종합하여 하나의 결과를 만드는 함수(합계, 평균, 개수, 최대, 최소)
-- * (주의) 일반적인 항목과 같이 출력할 수 없다.
SELECT PRICE FROM PRODUCT;
SELECT SUM(PRICE) FROM PRODUCT;

-- SELECT NAME, SUM(PRICE) AS 합계 FROM PRODUCT; -- 개수가 맞지 않아 조회 불가

SELECT AVG(PRICE) AS 평균 FROM PRODUCT;
SELECT MAX(PRICE) AS 최대 FROM PRODUCT;
SELECT MIN(PRICE) AS 최소 FROM PRODUCT;
SELECT COUNT(PRICE) AS 개수 FROM PRODUCT; -- 가격이 몇개 있는가?(null 제외)
SELECT COUNT(*) AS 개수 FROM PRODUCT; -- 데이터가 몇 개 있는가?(null 포함)

SELECT SUM(PRICE) AS 합계, AVG(PRICE) AS 평균 FROM PRODUCT;

-- (Q) 가장 비싼 상품의 이름을 출력(PRODUCT)
SELECT MAX(PRICE) AS 최대가격 FROM PRODUCT;
SELECT NAME FROM PRODUCT WHERE PRICE = 3000;

> SUB QUERY

/*
    SUBQUERY 사용
*/
-- #### SUB QUERY
-- * 구문을 중첩시켜 순차적으로 실행
SELECT NAME FROM PRODUCT WHERE PRICE = (SELECT MAX(PRICE) FROM PRODUCT);

-- (Q) 가장 최근에 만든 상품 정보
-- 1. 가장 마지막 시간을 구하고 그와 같은 상품을 조회
SELECT * FROM PRODUCT WHERE MADE = (SELECT MAX(MADE) FROM PRODUCT);
-- 2. 상품을 최신순으로 정렬하고 첫 번째 조회
-- 결과의 순서에 해당하는 항목을 알아야 함
-- #### ROWNUM
SELECT PRODUCT.*, ROWNUM FROM PRODUCT;

SELECT PRODUCT.*, ROWNUM FROM PRODUCT ORDER BY MADE DESC;

> ROWNUM

SELECT TMP.*, ROWNUM FROM (
    SELECT PRODUCT.* FROM PRODUCT ORDER BY MADE DESC
) TMP WHERE ROWNUM = 1;
-- ORDER 한 다음, ROWNUM을 붙이고 ROWNUM을 지정해 SELECT

SELECT TMP.*, ROWNUM FROM (
    SELECT PRODUCT.* FROM PRODUCT ORDER BY MADE DESC
) TMP WHERE ROWNUM BETWEEN 1 AND 3;

-- (Q) 가장 먼저 가입한 회원 정보
-- 1. 집계함수 사용
SELECT * FROM MEMBER WHERE MEMBER_JOIN = (SELECT MAX(MEMBER_JOIN) FROM MEMBER);
-- 2. ROWNUM 사용
SELECT TMP.* FROM (SELECT MEMBER.* FROM MEMBER ORDER BY MEMBER_JOIN DESC) TMP
WHERE ROWNUM = 1;

-- #### PAGING
-- * ROWNUM 활용
SELECT TMP.* FROM (SELECT MEMBER.* FROM MEMBER ORDER BY MEMBER_JOIN DESC) TMP
WHERE ROWNUM BETWEEN 1 AND 10;

SELECT TMP.* FROM (SELECT MEMBER.* FROM MEMBER ORDER BY MEMBER_JOIN DESC) TMP
WHERE ROWNUM BETWEEN 2 AND 10;

-- #### TOP END QUERY
-- * ROWNUM은 반드시 1부터 부여된다.

관리자 페이지

Dependency Injection(DI, 의존성 주입)

제약조건 삭제

ALTER TABLE MEMBER DROP CONSTRAINT CONSTRAINT_NAME

> deleteFinish

문제점

  • parameter가 노출

Solution

  • 세션에 일시적인 데이터를 보관하는 방법
    • session은 반드시 end point가 있을 때 사용
  • DB에서 데이터 불러오는 방법(parameter로 Id를 보내서 DB에 검색)
  • Flash Value
    • 새로 고침하면 사라짐
    • 인증키

> Spring 모듈 생성

@Repository

  • 영속성 content 제어 모듈

@Service

  • 모두 묶어서 쓸 때

@Component

  • 독립 기능

Reflection

@PostConstruct

profile
programmerD

0개의 댓글