Booking 테이블은 다음과 같다
CREATE TABLE booking(
id BIGINT AUTO_INCREMENT PRIMARY KEY,
guest_id BIGINT NOT NULL,
room_id BIGINT NOT NULL,
check_in_date DATE NOT NULL,
check_out_date DATE NOT NULL,
booking_status INT NOT NULL,
FOREIGN KEY (guest_id) REFERENCES member(id),
FOREIGN KEY (room_id) REFERENCES room(id)
);
1. 모델 (Model)
모델은 데이터와 비즈니스 로직을 관리하는 부분입니다. 주로 데이터베이스와의 상호작용을 담당하는 DAO(Data Access Object) 클래스와 데이터 객체인 Entity 클래스를 포함합니다.
Booking 클래스 (Entity)
package com.example.model;
import java.time.LocalDate;
public class Booking {
private long id;
private long guestId;
private long roomId;
private LocalDate checkInDate;
private LocalDate checkOutDate;
private int bookingStatus;
// 생성자, getter, setter 등 필요한 메서드 구현
public Booking() {
}
public Booking(long guestId, long roomId, LocalDate checkInDate, LocalDate checkOutDate, int bookingStatus) {
this.guestId = guestId;
this.roomId = roomId;
this.checkInDate = checkInDate;
this.checkOutDate = checkOutDate;
this.bookingStatus = bookingStatus;
}
// Getter and Setter methods
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public long getGuestId() {
return guestId;
}
public void setGuestId(long guestId) {
this.guestId = guestId;
}
public long getRoomId() {
return roomId;
}
public void setRoomId(long roomId) {
this.roomId = roomId;
}
public LocalDate getCheckInDate() {
return checkInDate;
}
public void setCheckInDate(LocalDate checkInDate) {
this.checkInDate = checkInDate;
}
public LocalDate getCheckOutDate() {
return checkOutDate;
}
public void setCheckOutDate(LocalDate checkOutDate) {
this.checkOutDate = checkOutDate;
}
public int getBookingStatus() {
return bookingStatus;
}
public void setBookingStatus(int bookingStatus) {
this.bookingStatus = bookingStatus;
}
@Override
public String toString() {
return "Booking{" +
"id=" + id +
", guestId=" + guestId +
", roomId=" + roomId +
", checkInDate=" + checkInDate +
", checkOutDate=" + checkOutDate +
", bookingStatus=" + bookingStatus +
'}';
}
}
BookingDAO 클래스
package com.example.dao;
import com.example.model.Booking;
import com.example.util.DBUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class BookingDAO {
// 예약 생성(host페이지에서 사용할듯)
public void createBooking(Booking booking) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DBUtil.getConnection();
String sql = "INSERT INTO booking (guest_id, room_id, check_in_date, check_out_date, booking_status) VALUES (?, ?, ?, ?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setLong(1, booking.getGuestId());
stmt.setLong(2, booking.getRoomId());
stmt.setObject(3, booking.getCheckInDate());
stmt.setObject(4, booking.getCheckOutDate());
stmt.setInt(5, booking.getBookingStatus());
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(stmt);
DBUtil.close(conn);
}
}
// 예약 상태 업데이트
public void updateBookingStatus(long bookingId, int bookingStatus) {
Connection conn = null;
PreparedStatement stmt = null;
try {
conn = DBUtil.getConnection();
String sql = "UPDATE booking SET booking_status = ? WHERE id = ?";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, bookingStatus);
stmt.setLong(2, bookingId);
stmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(stmt);
DBUtil.close(conn);
}
}
// 모든 예약 조회
public List<Booking> getAllBookings() {
List<Booking> bookings = new ArrayList<>();
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
conn = DBUtil.getConnection();
String sql = "SELECT * FROM booking";
stmt = conn.prepareStatement(sql);
rs = stmt.executeQuery();
while (rs.next()) {
Booking booking = new Booking();
booking.setId(rs.getLong("id"));
booking.setGuestId(rs.getLong("guest_id"));
booking.setRoomId(rs.getLong("room_id"));
booking.setCheckInDate(rs.getObject("check_in_date", LocalDate.class));
booking.setCheckOutDate(rs.getObject("check_out_date", LocalDate.class));
booking.setBookingStatus(rs.getInt("booking_status"));
bookings.add(booking);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtil.close(rs);
DBUtil.close(stmt);
DBUtil.close(conn);
}
return bookings;
}
}
2. 뷰 (View)
뷰는 사용자 인터페이스를 표시하는 부분입니다. 예를 들어, JSP 페이지를 사용하여 예약 관리 화면을 구성할 수 있습니다.
bookingManagement.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Booking Management</title>
</head>
<body>
<h1>Booking Management</h1>
<table border="1">
<tr>
<th>ID</th>
<th>Guest ID</th>
<th>Room ID</th>
<th>Check-in Date</th>
<th>Check-out Date</th>
<th>Status</th>
<th>Action</th>
</tr>
<c:forEach var="booking" items="${bookings}">
<tr>
<td>${booking.id}</td>
<td>${booking.guestId}</td>
<td>${booking.roomId}</td>
<td>${booking.checkInDate}</td>
<td>${booking.checkOutDate}</td>
<td>${booking.bookingStatus}</td>
<td>
<form action="BookingController" method="post">
<input type="hidden" name="bookingId" value="${booking.id}">
<button type="submit" name="action" value="approve">Approve</button>
<button type="submit" name="action" value="reject">Reject</button>
</form>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
3. 컨트롤러 (Controller)
컨트롤러는 사용자 입력을 처리하고, 비즈니스 로직을 호출하며, 적절한 뷰를 표시하는 역할을 합니다.
BookingController 클래스
package com.example.controller;
import com.example.dao.BookingDAO;
import com.example.model.Booking;
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 java.io.IOException;
import java.util.List;
@WebServlet("/BookingController")
public class BookingController extends HttpServlet {
private BookingDAO bookingDAO;
@Override
public void init() throws ServletException {
super.init();
bookingDAO = new BookingDAO(); // DAO 초기화
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
long bookingId = Long.parseLong(request.getParameter("bookingId"));
if ("approve".equals(action)) {
bookingDAO.updateBookingStatus(bookingId, 1); // 승인 처리
} else if ("reject".equals(action)) {
bookingDAO.updateBookingStatus(bookingId, 2); // 거절 처리
}
// 예약 관리 페이지로 리다이렉트
response.sendRedirect(request.getContextPath() + "/bookingManagement.jsp");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
List<Booking> bookings = bookingDAO.getAllBookings();
request.setAttribute("bookings", bookings);
request.getRequestDispatcher("/bookingManagement.jsp").forward(request, response);
}
}
요약
위 예제에서는 MVC 모델을 사용하여 Booking 관련 기능을 구현하는 방법을 보여주었습니다. Booking 클래스를 Entity로 사용하여 데이터베이스와의 상호작용을 담당하는 BookingDAO 클래스를 구현하고, BookingController를 통해 사용자 입력을 처리하며 적절한
'세미 프로젝트' 카테고리의 다른 글
[Java/Servlet] 게스트 입장에서 mvc 패턴으로 방 계약 구현 (0) | 2024.07.30 |
---|---|
[Java/Servlet] Dao와 DaoImpl (0) | 2024.07.28 |
[Java/Servlet] MVC 디자인 패턴: Model-View-Controller의 역할과 상호작용 + 방 리스트 조회 및 페이징 처리에 적용해보기 (0) | 2024.07.27 |
지도 API(Kakao Maps API)가져와서 웹에 띄우기 (0) | 2024.07.12 |
Booking 테이블은 다음과 같다
CREATE TABLE booking( id BIGINT AUTO_INCREMENT PRIMARY KEY, guest_id BIGINT NOT NULL, room_id BIGINT NOT NULL, check_in_date DATE NOT NULL, check_out_date DATE NOT NULL, booking_status INT NOT NULL, FOREIGN KEY (guest_id) REFERENCES member(id), FOREIGN KEY (room_id) REFERENCES room(id) );
1. 모델 (Model)
모델은 데이터와 비즈니스 로직을 관리하는 부분입니다. 주로 데이터베이스와의 상호작용을 담당하는 DAO(Data Access Object) 클래스와 데이터 객체인 Entity 클래스를 포함합니다.
Booking 클래스 (Entity)
package com.example.model; import java.time.LocalDate; public class Booking { private long id; private long guestId; private long roomId; private LocalDate checkInDate; private LocalDate checkOutDate; private int bookingStatus; // 생성자, getter, setter 등 필요한 메서드 구현 public Booking() { } public Booking(long guestId, long roomId, LocalDate checkInDate, LocalDate checkOutDate, int bookingStatus) { this.guestId = guestId; this.roomId = roomId; this.checkInDate = checkInDate; this.checkOutDate = checkOutDate; this.bookingStatus = bookingStatus; } // Getter and Setter methods public long getId() { return id; } public void setId(long id) { this.id = id; } public long getGuestId() { return guestId; } public void setGuestId(long guestId) { this.guestId = guestId; } public long getRoomId() { return roomId; } public void setRoomId(long roomId) { this.roomId = roomId; } public LocalDate getCheckInDate() { return checkInDate; } public void setCheckInDate(LocalDate checkInDate) { this.checkInDate = checkInDate; } public LocalDate getCheckOutDate() { return checkOutDate; } public void setCheckOutDate(LocalDate checkOutDate) { this.checkOutDate = checkOutDate; } public int getBookingStatus() { return bookingStatus; } public void setBookingStatus(int bookingStatus) { this.bookingStatus = bookingStatus; } @Override public String toString() { return "Booking{" + "id=" + id + ", guestId=" + guestId + ", roomId=" + roomId + ", checkInDate=" + checkInDate + ", checkOutDate=" + checkOutDate + ", bookingStatus=" + bookingStatus + '}'; } }
BookingDAO 클래스
package com.example.dao; import com.example.model.Booking; import com.example.util.DBUtil; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; import java.util.List; public class BookingDAO { // 예약 생성(host페이지에서 사용할듯) public void createBooking(Booking booking) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "INSERT INTO booking (guest_id, room_id, check_in_date, check_out_date, booking_status) VALUES (?, ?, ?, ?, ?)"; stmt = conn.prepareStatement(sql); stmt.setLong(1, booking.getGuestId()); stmt.setLong(2, booking.getRoomId()); stmt.setObject(3, booking.getCheckInDate()); stmt.setObject(4, booking.getCheckOutDate()); stmt.setInt(5, booking.getBookingStatus()); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(stmt); DBUtil.close(conn); } } // 예약 상태 업데이트 public void updateBookingStatus(long bookingId, int bookingStatus) { Connection conn = null; PreparedStatement stmt = null; try { conn = DBUtil.getConnection(); String sql = "UPDATE booking SET booking_status = ? WHERE id = ?"; stmt = conn.prepareStatement(sql); stmt.setInt(1, bookingStatus); stmt.setLong(2, bookingId); stmt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(stmt); DBUtil.close(conn); } } // 모든 예약 조회 public List<Booking> getAllBookings() { List<Booking> bookings = new ArrayList<>(); Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { conn = DBUtil.getConnection(); String sql = "SELECT * FROM booking"; stmt = conn.prepareStatement(sql); rs = stmt.executeQuery(); while (rs.next()) { Booking booking = new Booking(); booking.setId(rs.getLong("id")); booking.setGuestId(rs.getLong("guest_id")); booking.setRoomId(rs.getLong("room_id")); booking.setCheckInDate(rs.getObject("check_in_date", LocalDate.class)); booking.setCheckOutDate(rs.getObject("check_out_date", LocalDate.class)); booking.setBookingStatus(rs.getInt("booking_status")); bookings.add(booking); } } catch (SQLException e) { e.printStackTrace(); } finally { DBUtil.close(rs); DBUtil.close(stmt); DBUtil.close(conn); } return bookings; } }
2. 뷰 (View)
뷰는 사용자 인터페이스를 표시하는 부분입니다. 예를 들어, JSP 페이지를 사용하여 예약 관리 화면을 구성할 수 있습니다.
bookingManagement.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Booking Management</title> </head> <body> <h1>Booking Management</h1> <table border="1"> <tr> <th>ID</th> <th>Guest ID</th> <th>Room ID</th> <th>Check-in Date</th> <th>Check-out Date</th> <th>Status</th> <th>Action</th> </tr> <c:forEach var="booking" items="${bookings}"> <tr> <td>${booking.id}</td> <td>${booking.guestId}</td> <td>${booking.roomId}</td> <td>${booking.checkInDate}</td> <td>${booking.checkOutDate}</td> <td>${booking.bookingStatus}</td> <td> <form action="BookingController" method="post"> <input type="hidden" name="bookingId" value="${booking.id}"> <button type="submit" name="action" value="approve">Approve</button> <button type="submit" name="action" value="reject">Reject</button> </form> </td> </tr> </c:forEach> </table> </body> </html>
3. 컨트롤러 (Controller)
컨트롤러는 사용자 입력을 처리하고, 비즈니스 로직을 호출하며, 적절한 뷰를 표시하는 역할을 합니다.
BookingController 클래스
package com.example.controller; import com.example.dao.BookingDAO; import com.example.model.Booking; 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 java.io.IOException; import java.util.List; @WebServlet("/BookingController") public class BookingController extends HttpServlet { private BookingDAO bookingDAO; @Override public void init() throws ServletException { super.init(); bookingDAO = new BookingDAO(); // DAO 초기화 } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String action = request.getParameter("action"); long bookingId = Long.parseLong(request.getParameter("bookingId")); if ("approve".equals(action)) { bookingDAO.updateBookingStatus(bookingId, 1); // 승인 처리 } else if ("reject".equals(action)) { bookingDAO.updateBookingStatus(bookingId, 2); // 거절 처리 } // 예약 관리 페이지로 리다이렉트 response.sendRedirect(request.getContextPath() + "/bookingManagement.jsp"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Booking> bookings = bookingDAO.getAllBookings(); request.setAttribute("bookings", bookings); request.getRequestDispatcher("/bookingManagement.jsp").forward(request, response); } }
요약
위 예제에서는 MVC 모델을 사용하여 Booking 관련 기능을 구현하는 방법을 보여주었습니다. Booking 클래스를 Entity로 사용하여 데이터베이스와의 상호작용을 담당하는 BookingDAO 클래스를 구현하고, BookingController를 통해 사용자 입력을 처리하며 적절한
'세미 프로젝트' 카테고리의 다른 글
[Java/Servlet] 게스트 입장에서 mvc 패턴으로 방 계약 구현 (0) | 2024.07.30 |
---|---|
[Java/Servlet] Dao와 DaoImpl (0) | 2024.07.28 |
[Java/Servlet] MVC 디자인 패턴: Model-View-Controller의 역할과 상호작용 + 방 리스트 조회 및 페이징 처리에 적용해보기 (0) | 2024.07.27 |
지도 API(Kakao Maps API)가져와서 웹에 띄우기 (0) | 2024.07.12 |