
PK
FK
| movie_no | id |
|---|---|
| movie_title | 제목 |
| movie_rate | 평점 |
| movie_content | 줄거리 |
| movie_summary | 간단한 내용 |
| movie_img | 이미지 |
| movie_screen_date | 개봉일 |
| movie_time | 영화 상영 시간 |
| movie_category | 영화카테고리 |
| reserve_rate | 예매율 |
| age_grade | 연령제한등급 |
| user_no | id |
|---|---|
| user_id | 유저 계정 id |
| user_name | 유저 이름 |
| user_email | (추가바람) 유저 이메일 |
| user_password | 유저 계정 pw |
| review_no | id |
|---|---|
| user_no | 리뷰 작성자 |
| movie_no | 영화 번호 |
| review_title | 리뷰 제목 |
| review_content | 리뷰 내용 |
| review_rate | 사용자 평점 |
| theater_no | id |
|---|---|
| theater_name | 영화관 이름 |
| theater_location | 영화관 위치 |
| theater_detail_no | id |
|---|---|
| theater_no | id |
| movie_no | 영화 id |
| theater_detail_standard_date | 기준날짜 |
| theater_detail_time | 상영 시간 |
| theater_detail_remain_seats | 잔여 좌석수 |
| theater_detail_seats | 전체 좌석수 |
| reserve_no | id |
|---|---|
| user_no | 예약자 번호 |
| movie_no | 영화 번호 |
| theater_no | 영화관 번호 |
| reserve_time | 예약 시간 |
| reserve_enter_count | 입장 수 |
Movie SQL토글을 눌러서 SQL을 확인할 수 있습니다.
-- INSERT
INSERT INTO theaters VALUES (1, "롯데시네마 월드타워", "잠실 월드타워");
INSERT INTO theater_details(theater_no, movie_no, theater_detail_standard_date, theater_detail_time, theater_detail_remain_seats, theater_detail_seats)
VALUES (1, 1, STR_TO_DATE('20050208', '%Y%m%d') , "21:00", 65, 65);
INSERT INTO theater_details(theater_no, movie_no, theater_detail_standard_date, theater_detail_time, theater_detail_remain_seats, theater_detail_seats)
VALUES (1, 1, STR_TO_DATE('20050208', '%Y%m%d') , "6:00", 65, 65);
INSERT INTO users(user_id, user_email, user_name, user_password) VALUES('test', '[email protected]', '테스트', 'test');
INSERT INTO reserves(user_no, movie_no, reserve_time, reserve_enter_count) VALUES(1, 1, STR_TO_DATE("1200", '%H%i%s'), 5);
-- UPDATE
UPDATE theater_details SET theater_detail_remain_seats = 5 WHERE movie_no = 1;
test 용
INSERT INTO reviews(movie_no, user_no, review_title, review_content, review_rate) VALUES(1,1,'.','토르 4편 너무 재밌어요! 가족끼리 보기에도 딱이네요 ㅎㅎ 마이티 토르의 활약도 멋졌습니다!',4);
INSERT INTO reviews(movie_no, user_no, review_title, review_content, review_rate) VALUES(2,1,'.','탑건 2022 최고의 영화..! 탑건 1편을 보고 시청하세요!!',5);
INSERT INTO reviews(movie_no, user_no, review_title, review_content, review_rate) VALUES(3,1,'.','네게 미결로 남고 싶은 내 삶의 흔적',4);
INSERT INTO reviews(movie_no, user_no, review_title, review_content, review_rate) VALUES(5,1,'.','코난 극장판 역시 킬링타임용으로 딱..!',3);
ReviewController
package com.example.lottemoviereservation.controller;
import java.io.IOException;
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;
import com.example.lottemoviereservation.dao.MovieDao;
import com.example.lottemoviereservation.dao.ReviewDao;
import com.example.lottemoviereservation.dao.UserDao;
import com.example.lottemoviereservation.dto.MovieTitleDto;
import com.example.lottemoviereservation.dto.ReviewDto;
import com.example.lottemoviereservation.dto.UserDto;
import com.example.lottemoviereservation.dto.UserNameDto;
import org.json.JSONObject;
import java.util.List;
/**
* Servlet implementation class FindIdServlet
*/
@WebServlet("/review")
public class ReviewController extends HttpServlet {
private final String reviewTitle = ".";
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doProcess(req, resp);
}
public void doProcess(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
request.setCharacterEncoding("utf-8");
HttpSession session = request.getSession(true);
Object objLoginCheck = session.getAttribute("login");
// if (objLoginCheck == null) {
// String msg = "NO";
// response.sendRedirect("message.jsp?msg=" + msg);
// }
UserDto user = (UserDto) objLoginCheck;
String param = request.getParameter("param");
// int userNo = 1;
// String reviewContent = request.getParameter("reviewContent");
// int rating = Integer.parseInt(request.getParameter("rating"));
ReviewDao reviewDao = ReviewDao.getInstance();
MovieDao movieDao = MovieDao.getInstance();
UserDao userDao = UserDao.getInstance();
if (param.equals("movielist")) {
int movieNo = Integer.parseInt(request.getParameter("movieno"));
int page = Integer.parseInt(request.getParameter("page"));
JSONObject obj = new JSONObject();
List<ReviewDto> reviewList = reviewDao.getReviewPageListByMovieNo(movieNo, page);
List<UserNameDto> userNameList = userDao.getUserNameByReview(reviewList);
int reviewCount = reviewDao.getReviewCountByMovieNo(movieNo);
if (!reviewList.isEmpty()) {
obj.put("reviewList", reviewList);
obj.put("list", reviewList);
obj.put("userNameList", userNameList);
obj.put("reviewCount", reviewCount);
}
response.setContentType("application/x-json; charset=utf-8;");
response.getWriter().println(obj);
} else if (param.equals("insert")) {
int movieNo = Integer.parseInt(request.getParameter("movieno"));
int rating = Integer.parseInt(request.getParameter("rating"));
String reviewContent = request.getParameter("reviewContent");
ReviewDto reviewDto = new ReviewDto(movieNo, user.getUserNo(), reviewTitle, reviewContent, rating);
reviewDao.writeReview(reviewDto);
} else if (param.equals("update")) {
int reviewNo = Integer.parseInt(request.getParameter("reviewno"));
String updateContent = request.getParameter("updateContent");
reviewDao.updateReview(reviewNo, updateContent);
} else if (param.equals("delete")) {
int reviewNo = Integer.parseInt(request.getParameter("reviewno"));
reviewDao.deleteReview(reviewNo, user.getUserNo());
}else if (param.equals("userlist")) {
int userNo = Integer.parseInt(request.getParameter("userno"));
int page = Integer.parseInt(request.getParameter("page"));
JSONObject obj = new JSONObject();
List<ReviewDto> reviewList = reviewDao.getReviewPageListByUserNo(userNo, page);
List<MovieTitleDto> movieTitleList = movieDao.getMovieTitleByReview(reviewList);
int reviewCount = reviewDao.getReviewCountByUserNo(userNo);
if (!reviewList.isEmpty()) {
obj.put("reviewList", reviewList);
System.out.println("reviewList");
System.out.println(reviewList);
obj.put("list", reviewList);
System.out.println(reviewList);
obj.put("movieTitleList", movieTitleList);
obj.put("reviewCount", reviewCount);
}
response.setContentType("application/x-json; charset=utf-8;");
response.getWriter().println(obj);
}
}
}
ReviewDao
package com.example.lottemoviereservation.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import com.example.lottemoviereservation.db.DBClose;
import com.example.lottemoviereservation.db.DBConnection;
import com.example.lottemoviereservation.dto.ReviewDto;
//reviews rate int ....
public class ReviewDao {
private static ReviewDao dao = new ReviewDao();
private ReviewDao() {
}
public static ReviewDao getInstance() {
return dao;
}
public List<ReviewDto> getReviewList() {
//(int movieNo, int userNo, String reviewTitle, String reviewContent, double reviewRate
String sql = " select review_no, movie_no, user_no, review_title, review_content, review_rate "
+ " from reviews "
+ " order by review_no ";
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
List<ReviewDto> list = new ArrayList<>();
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
rs = psmt.executeQuery();
while (rs.next()) {
ReviewDto dto = new ReviewDto(
rs.getInt(1),
rs.getInt(2),
rs.getInt(3),
rs.getString(4),
rs.getString(5),
rs.getInt(6)
);
list.add(dto);
}
} catch (SQLException e) {
System.out.println("Get reviewList fail");
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return list;
}
public List<ReviewDto> getReviewListByMovieNo(int movieNo) {
//(int movieNo, int userNo, String reviewTitle, String reviewContent, double reviewRate
String sql = " select review_no, movie_no, user_no, review_title, review_content, review_rate "
+ " from reviews "
+ " where movie_no=? "
+ " order by review_no ";
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
List<ReviewDto> list = new ArrayList<>();
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1, movieNo);
rs = psmt.executeQuery();
while (rs.next()) {
ReviewDto dto = new ReviewDto(
rs.getInt(1),
rs.getInt(2),
rs.getInt(3),
rs.getString(4),
rs.getString(5),
rs.getInt(6)
);
list.add(dto);
}
} catch (SQLException e) {
System.out.println("Get reviewList fail");
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return list;
}
public List<ReviewDto> getReviewPageListByMovieNo(int movieNo, int page) {
//(int movieNo, int userNo, String reviewTitle, String reviewContent, double reviewRate
String sql = " select review_no, movie_no, user_no, review_title, review_content, review_rate "
+ " from ( "
+ " select row_number()over(order by review_no desc) as rnum, review_no, "
+ " movie_no, user_no, review_title, review_content, review_rate "
+ " from reviews "
+ " where movie_no=? "
+ " order by review_no desc ) a ";
sql += " where rnum between ? and ? ";
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
List<ReviewDto> list = new ArrayList<>();
int startPage = 1;
int endPage = page * 5;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1, movieNo);
psmt.setInt(2, startPage);
psmt.setInt(3, endPage);
rs = psmt.executeQuery();
while (rs.next()) {
ReviewDto dto = new ReviewDto(
rs.getInt(1),
rs.getInt(2),
rs.getInt(3),
rs.getString(4),
rs.getString(5),
rs.getInt(6)
);
list.add(dto);
}
} catch (SQLException e) {
System.out.println("Get reviewList fail");
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return list;
}
public List<ReviewDto> getReviewPageListByUserNo(int userNo, int page) {
//(int movieNo, int userNo, String reviewTitle, String reviewContent, double reviewRate
String sql = " select review_no, movie_no, user_no, review_title, review_content, review_rate "
+ " from ( "
+ " select row_number()over(order by review_no desc) as rnum, review_no, "
+ " movie_no, user_no, review_title, review_content, review_rate "
+ " from reviews "
+ " where user_no=? "
+ " order by review_no desc ) a ";
sql += " where rnum between ? and ? ";
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
List<ReviewDto> list = new ArrayList<>();
int startPage = 1;
int endPage = page * 5;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1, userNo);
psmt.setInt(2, startPage);
psmt.setInt(3, endPage);
rs = psmt.executeQuery();
while (rs.next()) {
ReviewDto dto = new ReviewDto(
rs.getInt(1),
rs.getInt(2),
rs.getInt(3),
rs.getString(4),
rs.getString(5),
rs.getInt(6)
);
list.add(dto);
}
} catch (SQLException e) {
System.out.println("Get reviewList fail");
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return list;
}
public boolean writeReview(ReviewDto dto) {
//(int movieNo, int userNo, String reviewTitle, String reviewContent, double reviewRate
String sql = " insert into reviews (movie_no, user_no, review_title, review_content, review_rate) "
+ " values(?, ?, ?, ?, ?) ";
Connection conn = null;
PreparedStatement psmt = null;
int count = 0;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1, dto.getMovieNo());
psmt.setInt(2, dto.getUserNo());
psmt.setString(3, dto.getReviewTitle());
psmt.setString(4, dto.getReviewContent());
psmt.setInt(5, dto.getReviewRate());
count = psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
System.out.println("Write Review fail");
DBClose.close(conn, psmt, null);
}
return count > 0;
}
public ReviewDto getReview(int review_no) {
String sql = " select review_no, movie_no, user_no, review_title, review_content, review_rate "
+ " from reviews "
+ " where review_no=? ";
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
ReviewDto dto = null;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1, review_no);
rs = psmt.executeQuery();
if (rs.next()) {
int n = 1;
dto = new ReviewDto(
rs.getInt(n++),
rs.getInt(n++),
rs.getInt(n++),
rs.getString(n++),
rs.getString(n++),
rs.getInt(n++)
);
}
} catch (SQLException e) {
System.out.println("GET REVIEW FAIL ! ! ! ");
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return dto;
}
public boolean updateReview(int review_no, String content) {
String sql = " update reviews "
+ " set review_title='.', review_content=? "
+ " where review_no=? ";
Connection conn = null;
PreparedStatement psmt = null;
int count = 0;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setString(1, content);
psmt.setInt(2, review_no);
count = psmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, null);
}
return count > 0;
}
public boolean deleteReview(int reviewNo, int userNo) {
String sql = " delete from reviews "
+ " where review_no=? and user_no=? ";
Connection conn = null;
PreparedStatement psmt = null;
int count = 0;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1, reviewNo);
psmt.setInt(2, userNo);
count = psmt.executeUpdate();
} catch (SQLException e) {
System.out.println("FAIL DELETE REVIEW");
e.printStackTrace();
}
return count > 0;
}
public int getReviewCountByMovieNo(int movieNo){
String sql = " select count(*) from reviews where movie_no=? ";
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
int len = 0;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1,movieNo);
rs = psmt.executeQuery();
if (rs.next()) {
len = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return len;
}
public int getReviewCountByUserNo(int userNo){
String sql = " select count(*) from reviews where user_no=? ";
Connection conn = null;
PreparedStatement psmt = null;
ResultSet rs = null;
int len = 0;
try {
conn = DBConnection.getConnection();
psmt = conn.prepareStatement(sql);
psmt.setInt(1,userNo);
rs = psmt.executeQuery();
if (rs.next()) {
len = rs.getInt(1);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBClose.close(conn, psmt, rs);
}
return len;
}
}