group by는 조건절중 하나이며, group by절은 반드시 group 함수와 같이 쓰이며, 중복되지 않은 데이터를 보여주고자 할때 사용한다.
select deptno, avg(sal) from emp group by deptno;
select deptno, sum(sal), avg(sal) from emp group by deptno;
select deptno, count(*), count(comm) from emp group by deptno;
select deptno, avg(sal) from emp group by deptno having avg(sal) >= 2000;
select deptno, max(sal), min(sal) from emp group by deptno having max(sal) >= 2900;
select sum(sal) from emp;
select sum(comm) from emp;
select avg(sal) from emp;
max(sal);
min(sal);
select count(comm) from emp;
select distinct job from emp;
select count(distinct job) from emp;
DAO, DTO는 기존 있던 파일들 사용, 쿼리문만 변경
BCommand.java
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface BCommand {
//인터페이스이므로 메소드선언만 가능하다. 구현은 자손이 한다.
void execute(HttpServletRequest request, HttpServletResponse response);
}
BListCommand.java
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class BListCommand implements BCommand {
@Override
public void execute(HttpServletRequest request, HttpServletResponse response) {
BDao dao = new BDao();
// 테이블에 있는 모든 데이터를 끌고 온다는 뜻
List<BDto> dtos = dao.list();
//forwarding될때까지 메모리에 살아있음을 반드시 기억해야한다.
request.setAttribute("list", dtos);
}
}
BController.java (서블릿 파일)
package edu.global.ex.dto;
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;
// 모든 url 들은 webServlet에서 받아내겠다는 뜻
@WebServlet("*.do")
public class BController extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public BController() {
super();
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//doGet메소드를 탈 시에 console에 기록하기 위해 넣었다.(디버깅위해)
System.out.println("doGet() ..");
actionDo(request,response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//doPost메소드를 탈 시에 console에 기록하기 위해 넣었다.(디버깅위해)
System.out.println("doPost() ..");
actionDo(request,response);
}
private void actionDo(HttpServletRequest request, HttpServletResponse response) throws ServletException , IOException {
System.out.println("actionDo() ..");
request.setCharacterEncoding("UTF-8");
String viewPage = null;
BCommand command = null;
//위의 세 줄은 http://localhost:8282/jsp_mvc_board/list.do 에서 list.do를 꺼내기 위한 코드들.
String uri = request.getRequestURI();
String conPath = request.getContextPath();
String com = uri.substring(conPath.length());
System.out.println("경로 확인:" + uri + ":" + conPath + ":" + com );
if(com.equals("/List.do")) {
command = new BListCommand();
command.execute(request, response);
viewPage ="List.jsp";
}
/*
클라이언트에게 list 는 list.jsp로 forwarding을 시키겠다는 의미이다.
forwarding은 BListCommand클래스에서 메모리에 올린 request, response 객체 정보를
list.jsp에서 사용가능하다는 의미다. forwarding될때까지 정보가 살아있기 때문이다.
고로 list.jsp에서 forEach문을 사용하여 데이터를 꺼낼 수 있다.
*/
RequestDispatcher dispatcher = request.getRequestDispatcher(viewPage);
dispatcher.forward(request, response);
}
}
list.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<table width="500" border="1">
<tr>
<td>번호</td>
<td>이름</td>
<td>제목</td>
<td>날짜</td>
<td>히트</td>
</tr>
<!--
--이때 List는 BListCommand에서 메모리에 올린 list를 뜻함.
포워딩시 살아있으므로 forEach문을 이용해 데이터를 꺼낼 수 있다.
-->
<c:forEach var="board" items="${list}">
<tr>
<td>${board.bid}</td>
<td>${board.bname}</td>
<td>${board.btitle}</td>
<td>${board.bdate}</td>
<td>${board.bhit}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
Model : 애플리케이션의 정보, 데이터를 나타낸다. 데이터베이스, 처음의 정의하는 상수, 초기화값, 변수 등을 뜻하며, 또한 이러한 DATA, 정보들의 가공을 책임지는 컴포넌트이다.
Controller : 데이터와 사용자 인터페이스 요소들을 잇는 다리역할을 하며 사용자가 데이터에 접근하고 수정하는 것에 대한 "이벤트"들을 처리하는 부분을 뜻한다.
View : 데이터 및 객체의 입력, 그리고 보여주는 출력을 담당합니다. 데이터를 기반으로 사용자들이 볼 수 있는 화면을 뜻함