웹 사이트 구축 (흐름)
9. 예외처리 페이지 만들기
10. 로그 기록하기
1. 시작페이지 만들기
2. 상품목록 표시하기 (DB연결추가) ==> 3. 상품 상세정보 표시하기 ==> 4. 상품 등록 페이지 만들기 => 11. 장바구니 페이지 만들기 => (@현단계)12. 주문처리 페이지 만들기
13. Database ==> 회원가입 5. 상품 이미지 등록하기
14. 게시판 만들기 6. 유효성 검사하기 ==> 7. 다국어 처리하기 ==> 8. 보안 처리하기
*주문처리 페이지
- 배송 정보 패키지 => 주문 정보 => 주문 완료
=> 주문 취소
DAO
DB접속에 따른 필요한 기능 구현
getConnection() 구현 -> DB접속하는 메서드(Connection 객체 리턴하는 메서드)
getAllProducts() 구현 -> 물품목록 출력 (모든 상품정보를 넘겨주는 getter메서드)
getProductById(String productId) 구현-> listOfProducts에 저장된 모든 상품 목록을 조회해서 상품아이디와 일치하는 상품을 리턴하는 메서드
ProductRepository.java
package kr.gov.dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import kr.gov.dto.Product;
public class ProductRepository {
private ArrayList<Product> listOfProducts = new ArrayList<>();
//ProductRepository인스턴스를 하나만 공유하게끔 싱글톤 패턴 사용
private static ProductRepository instance = new ProductRepository();
//DB 접속에 필요한 멤버
private Connection conn = null;
private PreparedStatement pstmt = null;
private ResultSet rs = null;
private static String url = "jdbc:mysql://localhost:3306/webstoredb?serverTimezone=UTC";
private static String user = "root";
private static String password = "7496";
//ProductRepository인스턴스를 리턴하는 getter메서드
public static ProductRepository getInstance() {
return instance;
}
public ProductRepository() {
//DB 연동전 임시데이터로 활용
// Product phone = new Product("P1234", "iPhone 12 Pro Max", 1490000);
// phone.setDescription("6.7-unch, 2778*1284-pixel, OLED Super Retina XDR display, cameras");
// phone.setCategory("Smart Phone");
// phone.setMenufecturer("Apple");
// phone.setUnitprice(1490000);
// phone.setNumberOfstock(7000);
// phone.setCondition("New");
// phone.setFilename("iphone-12-pro-max-gold-hero.jpg");
//
// Product notebook = new Product("P1235", "LG 울트라 기어", 1930000);
// notebook.setDescription("15-unch, 1920*1080-pixel, IPS LED display, 10세대 인텔 코어 i7-10510U 프로세서");
// notebook.setCategory("notebook");
// notebook.setMenufecturer("LG");
// notebook.setUnitprice(1930000);
// notebook.setNumberOfstock(5000);
// notebook.setCondition("Refurbished");
// notebook.setFilename("usp_0103.jpg");
//
// Product tablet = new Product("P1236", "갤럭시 탭 S7+", 1149500);
// tablet.setDescription("12-unch, 2800*1752-pixel, Super AMOLED display, Octa-Core 프로세서");
// tablet.setCategory("Tablet");
// tablet.setMenufecturer("SAMSUNG");
// tablet.setUnitprice(1149500);
// tablet.setNumberOfstock(3000);
// tablet.setCondition("Old");
// tablet.setFilename("b008b623-6fe8-4191-82bd-d988db87e6e6.jpg");
//
// listOfProducts.add(phone);
// listOfProducts.add(notebook);
// listOfProducts.add(tablet);
}
//항목을 리턴해주는 객체 추가
//모든 상품정보를 넘겨주는 getter메서드
public ArrayList<Product> getAllProducts() {
String sql = "select * from product";
try {
conn = getConnection(); //커넥션 얻기
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery(); //DB에 저장되어 있는 상품 모두 가져와 ResultSet에 담음
while(rs.next()) {
Product product = new Product(); //빈 객체인 product에 각각 DB에서 가져온 값을 저장
product.setProductId(rs.getString("productId"));
product.setPname(rs.getString("pname"));
product.setUnitprice(rs.getInt("unitprice"));
product.setDescription(rs.getString("description"));
product.setMenufecturer(rs.getString("menufecturer"));
product.setCategory(rs.getString("category"));
product.setNumberOfstock(rs.getLong("numberOfstock"));
product.setCondition(rs.getString("conditions"));
product.setFilename(rs.getString("filename"));
listOfProducts.add(product); //ArrayList 컬랙션에 product 객체 추가
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
System.out.println("DB연동 해제");
} catch (Exception e2) {
e2.printStackTrace();
}
}
return listOfProducts; // 각 객체가 저장되어 ArrayList 리턴함.
}
//DB 접속 (Connection 객체 리턴하는 메서드)
public Connection getConnection() {
// TODO Auto-generated method stub
try {
Class.forName("com.mysql.cj.jdbc.Driver"); //드라이버명
conn = DriverManager.getConnection(url, user, password); //DB연결 객체 얻음.
System.out.println("DB 연동 완료");
} catch (Exception e) {
// TODO Auto-generated catch block
System.out.println("DB 연동 실패");
e.printStackTrace();
}
return conn;
}
//listOfProducts에 저장된 모든 상품 목록을 조회해서 상품아이디와 일치하는 상품을 리턴하는 메서드
public Product getProductById(String productId) {
Product productById = new Product();
String sql = "select * from product where productId = ?";
try {
conn = getConnection();
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, productId);
rs = pstmt.executeQuery(); //인자값으로 넘어온 productId에 해당하는 상품을 ResultSet객체에 하나만 저장됨.
if(!rs.next()) {
return null; //일치하는 상품이 없는 상태.
}
//인자값으로 넘어온 productId값이 있다면
if(rs.next()) {
productById.setProductId(rs.getString("productId"));
productById.setPname(rs.getString("pname"));
productById.setUnitprice(rs.getInt("unitprice"));
productById.setDescription(rs.getString("description"));
productById.setMenufecturer(rs.getString("menufecturer"));
productById.setCategory(rs.getString("category"));
productById.setNumberOfstock(rs.getLong("numberOfstock"));
productById.setCategory(rs.getString("conditions"));
productById.setFilename(rs.getString("filename"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null) rs.close();
if(pstmt != null) pstmt.close();
if(conn != null) conn.close();
} catch (Exception e2) {
e2.printStackTrace();
}
}
// for(int i = 0; i<listOfProducts.size(); i++) {
// Product product = listOfProducts.get(i);
//
// if(productId != null && product.getProductId() != null &&
// product.getProductId().equals(productId)) {
// productById = product;
// break;
// }
// }
return productById;
}
//상품을 추가하는 메서드
public void addProduct(Product product) {
listOfProducts.add(product);
}
}