본문 바로가기
공부/[Project] 치킨

작성된 리뷰 목록을 확인하는 기능

by 맴썰 2021. 12. 27.
package dao;
import static com.smc.db.JdbcUtil.*;

import java.util.ArrayList;
import java.sql.*;
import org.springframework.stereotype.Repository;

import vo.Chicken;
import vo.Review;

@Repository
public class RevDAO {
	Connection con;
	private static RevDAO rDAO;
	
	public void setConnection(Connection con) { this.con = con;}
	
	public static RevDAO getInstance() {
		if(rDAO==null) rDAO = new RevDAO();
		return rDAO;
	}
	
	public int insertReview(Review rev) {
		PreparedStatement pstmt = null;
		PreparedStatement pstmt2 = null;
		int insertCount = 0;
		String Sql = "";
		String Sql2 = "update review set code = (select code from chicken where review.name = chicken.name)";
		try {
			Sql = "insert into review(code,name,grade,text) values(?,?,?,?)";
			pstmt = con.prepareStatement(Sql);
			pstmt.setInt(1,1);
			pstmt.setString(2, rev.getName());
			pstmt.setInt(3,rev.getGrade());
			pstmt.setString(4, rev.getText());
			insertCount = pstmt.executeUpdate();
			pstmt2 = con.prepareStatement(Sql2);
			insertCount+=pstmt2.executeUpdate();
		}catch(SQLIntegrityConstraintViolationException e){
			System.out.println("이미 같은 정보가 있습니다.");
			return -1;
		}catch(SQLException e) {
			e.printStackTrace();
		}finally { close(pstmt); close(pstmt2);}
		
		return insertCount;
	}
	
	public ArrayList<Review> getReviewList(){
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		ArrayList<Review> Rlist = null;
		try {
			pstmt = con.prepareStatement("SELECT * FROM review");
			rs = pstmt.executeQuery();
			if(rs.next()) {
				Rlist = new ArrayList<>();
				do {
					Rlist.add(new Review(rs.getString("name"),rs.getInt("grade"),rs.getString("text")));
				} while(rs.next());
			}
		} catch(SQLException e) {
			e.printStackTrace();
		}finally {close(rs); close(pstmt);}
		
		return Rlist;
	}
	
	
}

<ReviewDAO.java>

DAO file에서 PreparedStatement와 ResultSet 객체를 이용해서 review table의 모든 튜플들을 받아와 ArrayList 형태로 가공하여 return 하는 코드를 작성하였다.  


package service;

import static com.smc.db.JdbcUtil.*;
import org.springframework.stereotype.Service;
import java.sql.Connection;
import java.util.ArrayList;

import vo.Review;
import dao.RevDAO;

@Service
public class ReviewListService {
	public RevDAO  rDAO = new RevDAO();
	
	public ArrayList<Review> getRlist() {
		rDAO = RevDAO.getInstance();
		Connection con = getConnection();
		rDAO.setConnection(con);
		ArrayList<Review> temp =  rDAO.getReviewList();
		close(con);
		return temp;
	}
	
	public ArrayList<Review> getspecificRlist(ArrayList<Review> rlist, String name){
		ArrayList<Review> temp = new ArrayList<Review>();
		for(int i=0; i<rlist.size(); i++) {
			if(rlist.get(i).getName().equals(name)) {
				temp.add(rlist.get(i));
			}
		}
		return temp;
	}
}

<ReviewListService.java>

치킨의 종류와 상관없이 모든 치킨의 리뷰들을 ArrayList형태로 return하는 getRlist함수와 특정 치킨의 이름과 결과를 mapping시켜 특정 치킨의 리뷰만 들어있는 ArrayList를 return하는 getspecificRlist 함수를 작성하였다.

 

 


package com.smc.test;


import java.util.ArrayList;

import vo.Review;
import service.ReviewListService;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class ReviewListController {
	@Autowired
	private ReviewListService rls;
	
	@RequestMapping("/Rlist.chic")
	public ModelAndView view(HttpServletRequest request) {
		ArrayList<Review> temp = rls.getRlist();
		try {
			request.setAttribute("review", temp);
		}catch(Exception e) {
			e.printStackTrace();
		}
		ModelAndView mav = new ModelAndView();
		mav.setViewName("/Rlist");
		return mav;
	}
}

<ReviewListController.java>

Autowired 객체를 이용하여 spring 컨테이너에 생성되어 있는 ReviewListService객체를 자동으로 rls에 주입시켰다. 

그리고 ArrayList에 전체 리뷰를 담아 HttpServletRequest 클래스의 setAttribute 함수를 이용해 보내는 코드이다.

 


<%@ page  import = "vo.Review"%>
<%@ page  import = "service.ReviewListService"%>
<%@ page  import = "java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page trimDirectiveWhitespaces="true" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP Title</title>
</head>
<body>
<header>
			<img src = "resources/img/SMClogo.png" width = "50" height = "50">
			<a href = "/test"><img src = "resources/img/logo2.png" width = "140" height = "50"></a>
			<a href= "CList.chic"><img src = "resources/img/list.png" width = "120" height = "50"></a>
			<a href= "CInsert.chic"><img src = "resources/img/regist.png" width = "120" height = "50"></a>
</header>
<%
	ArrayList<Review> temp = (ArrayList<Review>)request.getAttribute("review");
	String name = (String)request.getParameter("name");
	out.println(name);
	ReviewListService rls = new ReviewListService();
	ArrayList<Review> rlist = rls.getspecificRlist(temp, name);
%>

 <h3>리뷰 목록 </h3>
 	<table style="1px solid black; width:30%; height:100px; margin : auto; text-align = center";>
 	<tr>
 		<td>이름</td>
 		<td>평점</td>
 		<td>내용</td>
 		
 	</tr>
 	<%
 		if(rlist.size()!=0){
 			for(int i=0; i<rlist.size();i++){
 		
 	%>
	<tr> 
 		<td><% String names = rlist.get(i).getName(); out.println(name); %></td>
 		<td><%=rlist.get(i).getGrade() %></td>
 		<td><%=rlist.get(i).getText() %></td>
 	</tr>
 	<%
 		}
 	} else{
 	%>
 	 <tr><td colspan="2"> 등록된 리뷰가 없습니다. </td></tr>
 	<%
 	}
 	%>
 	
 	
 	</table>
 


</body>
</html>

치킨 리스트와 리뷰 작성 페이지에서 hidden input을 이용해 get형식으로 넘긴 치킨 이름 값을 받고, 컨트롤러에서 넘긴 ArrayList를 받아 ReviewListservice객체의 getspecificRlist 함수를 수행하여 특정 치킨에 대한 리뷰만 담은 ArrayList를 생성한다. 이 때 Object type으로 return 되는 getAttribute 함수는 형 변환을 하여 받아야 한다.

그 후 for문을 이용해 모든 리뷰 객체의 내용을 출력할 수 있도록 코드를 작성하였다. 

 


리뷰 작성 기능에서 작성한 리뷰가 보이는 모습

'공부 > [Project] 치킨' 카테고리의 다른 글

로그인 기능  (0) 2022.01.06
회원가입 기능  (0) 2022.01.06
치킨에 대한 리뷰를 작성하는 기능  (0) 2021.12.27
새로운 치킨을 등록하는 기능  (0) 2021.12.23
리스트를 보여주는 기능  (0) 2021.12.23