D+29::DB_JOIN/템플릿프로젝트/세션(session)

Am.Vinch·2022년 8월 9일
0

20220804_THU

SELECT * FROM EMP;

SELECT * FROM DEPT;

--이 둘은 다른 테이블이지만 서로 연관되어있는 테이블이다.(공통점 DEPTNO 때문에)
--이 두개의 테이블을 한번에 조회하고 싶을 때?

  • 조인(JOIN) 쿼리문: 여러가지 테이블 동시에 조회

<참고>
--객체명처럼 앞에 '테이블명.컬럼명' 사용하기

SELECT EMP.EMPNO, EMP.ENAME, EMP.DEPTNO 
FROM EMP;
--테이블명 별칭은 'AS' 사용 안한다! 그래서 바로 컬럼명 적용
SELECT E.EMPNO, E.ENAME, E.DEPTNO 
FROM EMP E;

--각각의 테이블의 컬럼명 모두를 앞뒤로 한번에 적고 조회
--중복된컬럼명 앞에 테이블명 입력해주기.

--조인(JOIN)_쿼리문

SELECT EMPNO,ENAME, EMP.DEPTNO, DEPT.DEPTNO,DNAME,LOC
FROM EMP,DEPT
ORDER BY EMPNO;

--문제점발생: 사원1명당 4개의 여러 부서행 발생-> 14 * 4= 56행 조회
--해결방법: 조건절에 두개의 테이블 중 공통점 DEPTNO가 같다는 조건절

SELECT EMPNO,ENAME, EMP.DEPTNO, DEPT.DEPTNO,DNAME,LOC
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
ORDER BY EMPNO;

--예제)이문세 사원(EMP)이 속해있는 부서명(DEPT)을 조회해주세요.
SELECT DNAME
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO AND ENAME='이문세';

--예제)경리부에서 근무하는 사원의 이름,입사일 조회하라.
SELECT ENAME,TO_CHAR(HIREDATE,'YYYY-MM-DD')
FROM EMP,DEPT
WHERE EMP.DEPTNO = DEPT.DEPTNO
AND DNAME='경리부';


  • 템플릿 연습
    프로젝트명:TemplateProject_Stumanage_0803

  • 세션(session)/쿠키(cookie)
    프로젝트명 SessionCookie_0804

1.컨트롤러

package controller;

import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


@WebServlet("*.do")
public class SessionController extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	
    public SessionController() {
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doProcess(request, response);
	}
	
	protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//한글 인코딩 처리
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
	
		String requestURI = request.getRequestURI();
		String contextPath = request.getContextPath();
		String command = requestURI.substring(contextPath.length());
		System.out.println("command = " + command);
		
		String page = "";//계속 바뀌면 초기값 빈값준다.
		boolean isRediect = false;
		
		//첫 페이지로 이동
		if(command.equals("/first.do")) {
			//데이터넘겨주는 방식: 'request' 평소 우리가 사용
			request.setAttribute("age", 20);
//			문제점: 데이터 넘겨줄때마다 반복적으로 넣어줘야하기 때문 중복 반복된다.다음데이터넘겨줄때 연결x 1회용..
//			서버라는 세션영역에 한 번 저장하면 어디든 들고 데이터 넘겨줄수있는 방식
		//[순서]
		//1번.세션객체 생성
		//2번.세션에 데이터 등록
		//3번.세션 만료 시간 설정(ex.은행업무 로그인 완료시간)	
			//1번
			HttpSession session = request.getSession();
			//2번
			session.setAttribute("age", 30);//평소 데이터 넘겨주는 방식에서 request > session으로 대체
			//3번: 안적으면 기본값 30분
			session.setMaxInactiveInterval(5);//(단위 : 초)
			//두번째 페이지로 이동하고 5초뒤 새로고침하면 age값이 사라진다.
			
			//의문점: age 두번사용되었는데 중복아닌가? 
			//아니다. 왜냐면 request(페이지이동시마다 사용하는 작은 소쿠리)와 session(전체 페이지 데이터담는 큰 소쿠리)은 서로 독립된 다른 바구니이기때문에 중복x
			//세션은 페이지가 끝내기까지가 아니라 인터넷브라우저가 완전히 꺼질때까지 데이터를 저장시킨다!!!
			page="first.jsp";
		}
		//두번째 페이지로 이동
		else if(command.equals("/second.do")) {
			page="second.jsp";
		}
		//세번째 페이지로 이동
		else if(command.equals("/third.do")) {
			page="third.jsp";
		}
		
		if(isRediect) {
			response.sendRedirect(page);//페이지이동할때 알아서 자동으로 템플릿으로 간다.
		}
		else {
			RequestDispatcher dispatcher = request.getRequestDispatcher(page);
			dispatcher.forward(request, response);
		}
	}

}

2.인덱스 jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<jsp:forward page="first.do"></jsp:forward>
</body>
</html>
  1. 화면 1,2,3 페이지 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>first 페이지입니다.</h3>
<a href="second.do">두번째 페이지로 이동</a><br>
${age}<br><!-- request 바구니에 담긴 age 값 -->
${sessionScope.age }<!-- session 바구니에 담긴 age 값 -->
</body>
</html>


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>second 페이지입니다.</h3>
<a href="third.do">세번째 페이지로 이동</a><br>
${sessionScope.age }
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>third 페이지입니다.</h3>
${sessionScope.age }
</body>
</html>

  • 디비-자바 게시판(댓글포함) 만들기
    예제)

게시글 리스트 : 글번호 제목 작성자 작성이 조회수

profile
Dev.Vinch

0개의 댓글