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 |