[issue] view layer 코드 구현
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import = "java.sql.*" %>
<%@ page import = "vo.*" %>
<%@ page import = "java.util.*" %>
<%
// Controller Layer : 요청처리
// 파라미터값 : 현재페이지(String -> Integer -> int), 검색단어(Strig)
// 파라미터값 확인
System.out.println(request.getParameter("currentPage")
+ " <-- empListBySearch param currentPage");
System.out.println(request.getParameter("searchWord"));
System.out.println(request.getParameter("rowPerPage"));
// 파라미터값 null 유효성 검사
int currentPage = 1;
if(request.getParameter("currentPage") != null) {
currentPage = Integer.parseInt(request.getParameter("currentPage"));
}
String searchWord = "";
if(request.getParameter("searchWord") != null) {
searchWord = request.getParameter("searchWord");
}
int rowPerPage = 10;
if(request.getParameter("rowPerPage") != null) {
rowPerPage = Integer.parseInt(request.getParameter("rowPerPage"));
}
// 파라미터값 확인
System.out.println(currentPage+ " <-- empListBySearch currentPage");
System.out.println(searchWord+ " <-- empListBySearch searchWord");
System.out.println(rowPerPage+ " <-- empListBySearch rowPerPage");
// Model Layer : 모델값 생성하기 까지
// controller layer의 결과 변수(currentPage, searchWord)외 모델을 생성하기 위해 필요한 변수추가
// controller layer의 결과 변수 가공
int startRow = (currentPage - 1) * rowPerPage;
// rowPerPage 15 -> currentPage 1 -> startRow 0
// rowPerPage 20 -> currentPage 2 -> startRow 20
System.out.println(startRow+ " <-- empListBySearch startRow");
// DB호출에 변수 생성
String driver = "org.mariadb.jdbc.Driver";
String dbUrl = "jdbc:mariadb://127.0.0.1:3306/employees";
String dbUser = "root";
String dbPw = "java1234";
Class.forName(driver);
Connection conn = DriverManager.getConnection(dbUrl, dbUser, dbPw);
// 동적쿼리
String sql = null;
PreparedStatement stmt = null;
if(searchWord.equals("") == true) { // if(searchWord.equals("")) {
sql = "SELECT * FROM employees ORDER BY emp_no ASC LIMIT ?, ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, startRow);
stmt.setInt(2, rowPerPage);
} else {
/*
SELECT * FROM employees
WHERE CONCAT(first_name, ' ', last_name) LIKE ?
ORDER BY emp_no ASC
LIMIT ?, ?
*/
sql = "SELECT * FROM employees WHERE CONCAT(first_name, ' ', last_name) LIKE ? ORDER BY emp_no ASC LIMIT ?, ?";
stmt = conn.prepareStatement(sql);
stmt.setString(1, "%"+searchWord+"%");
stmt.setInt(2, startRow);
stmt.setInt(3, rowPerPage);
}
System.out.println(stmt + " <--empList stmt: 완성된 like 동적 쿼리문");
ResultSet rs = stmt.executeQuery();
// 일반적인 자료구조(모델)로 변경
ArrayList<Employee> empList = new ArrayList<Employee>();
while (rs.next()){ // rs.next()가 참이면, 즉 데이터가 존재하는 동안 반복
Employee emp = new Employee(); // Employee클래스의 변수 emp선언하고 초기화
emp.empNo = rs.getInt("emp_no"); // rs의 int 타입인 empNo컬럼을 읽어와서 emp의 empNo필드에 저장한다
emp.birthDate = rs.getString("birth_date"); // rs의 String타입인 birthDate컬럼을 읽어와서 emp의 birthDate필드에 저장한다
emp.firstName = rs.getString("first_name");
emp.lastName = rs.getString("last_name");
emp.gender = rs.getString("gender");
emp.hireDate = rs.getString("hire_date");
empList.add(emp); // rs의 필드값이 저장된 emp를 empList에 추가하고 이를 rs.next()가 참인동안(데이터가 존재하면) 반복한다
}
// 모델값 디버깅
System.out.println(empList.size() + " <--empListBySearche empList.size()");
for(Employee e : empList) {
System.out.println(e.firstName +" "+e.lastName);
}
// 두번째 모델값
int totalCount = 0;
int lastPage = 0;
// View Layer
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>empListBySearch</title>
</head>
<body>
</body>
</html>