자바 웹 온라인 쇼핑 몰 - 주문 실현 부분

11298 단어 자바
1. 주문 모듈
1_준비 작업
내 주문서
2_OrderServlet__>findMyOrdersWithPage
     //사용자 로그 인 상태 확인
      //주문 대상 을 만 들 고 주문 대상 에 값 을 부여 합 니 다.
     //쇼핑 항목 을 옮 겨 다 니 면서 주문 항목 을 만 듭 니 다.
     //비 즈 니스 계층 기능 호출: 주문서 저장
      //카 트 를 비우 다
     //주문 서 를 request 에 넣 기
     //전송/jsp/orderinfo.jsp
사용자 로그 인 상태 확인
request.getSession().getAttribute("loginUI"); 
주문 대상 을 만 들 고 주문 대상 에 값 을 부여 합 니 다.
1. 주문 대상 을 만 들 려 면 Order order = new Order () 가 있어 야 합 니 다.
2. 주문 대상 에 상품 을 추가 하려 면 카 트 안의 각종 상품 이 필요 합 니 다.그래서 카 트 대상 을 새로 만들어 야 한다.
Cart cart = new Cart(); 우 리 는 이 주문 서 를 위해 약간의 값 을 생 성 해 야 한다. 예 를 들 어 주문 번호, 신축 시간, 상품 총량, 상태, 주문 소유자 등 이다.
3. 쇼핑 항목 을 옮 겨 다 니 면서 주문 항목 만 들 기
for 순환 사용 (우 리 는 어느 것 을 옮 겨 다 니 는 지 알 아야 합 니 다. 현재 쇼핑 항목 을 옮 겨 다 닐 때 cart. getCartItems (), 이전의 옮 겨 다 니 는 변수 도 당연히 CartItem item 입 니 다)
주문 항목 을 만 들 때 주의해 야 합 니 다. Order. java 에서 우 리 는 이미 교묘 하 게 List 에 가입 했다 는 것 을 알 고 있 습 니 다.
setOrder 방법 은 주문 항목 을 "가입"주문 하 는 것 입 니 다.
order.getList().add(orderItem); 상술 한 요 구 를 완성 하 다
4. 주문서 저장, 즉 업무 층 호출 ( OrderService OrderService=new OrderServiceImp(); )
OrderService.saveOrder(order); //Order Service. java 로 이동
// saveOrder                  
public String saveOrder(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		//        
        //   Attribute        ,           
		User user = (User)req.getSession().getAttribute("loginUI");
            //   user    ,    
		if(user == null) {
			req.setAttribute("msg", "       ");
			return "/jsp/order_info.jsp";
		}
		//     
		Cart cart = new Cart();
		//      ,         
		Order order = new Order();
		//        ,     
		order.setOid(UUIDUtils.getCode());
		order.setOrdertime(new Date());
		order.setTotal(cart.getTotal());
		order.setState(1);
		order.setUser(user);
		
		//       :                    ;
		for(CartItem item : cart.getCartItems()) {
			OrderItem orderItem=new OrderItem();
			orderItem.setItemid(UUIDUtils.getCode());
			orderItem.setQuantity(item.getNum());
			orderItem.setTotal(item.getSubTotal());
			orderItem.setProduct(item.getProduct());
			//        orderItem     order(   ) 
			//      list->add    
			orderItem.setOrder(order);
			order.getList().add(orderItem);
			
		}
		//     
		cart.clearCart();
		//     request
		req.getSession().setAttribute("order", order);
		//  /jsp/order_info.jsp
		return "/jsp/order_info.jsp";
	}
	OrderDao orderDao = new OrderDaoImp();
	
	@Override
	public void saveOrder(Order order) throws SQLException {
		//              (    ,  )
		/*try {
			JDBCUtils.startTransaction();
			OrderDao orderDao=new OrderDaoImp();
			orderDao.saveOrder(order);
			for(OrderItem item:order.getList()){
				orderDao.saveOrderItem(item);
			}
			JDBCUtils.commitAndClose();
		} catch (Exception e) {
			JDBCUtils.rollbackAndClose();
		}
		*/
		Connection conn = null;
		
		try {
			conn = JDBCUtils.getConnection();
			//    
			conn.setAutoCommit(false);
			//    
			orderDao.saveOrder(conn, order);
			//     
			for(OrderItem orderItem : order.getList()) {
				orderDao.saveOrderItem(conn, orderItem);
			}
			//    
			conn.commit();
		} catch (Exception e) {
			conn.rollback();
		}
	}

위의 코드 를 기록 합 니 다. 그 중에서 주문 서 를 저장 하고 주문 항목 을 저장 하 는 것 은 자신 이 쓴 항목 의 변화 에 따라 달라 져 야 합 니 다. 데이터 계층 Dao 를 호출 하여 사용 합 니 다.
 
saveorder 와 saveordeItem 은 Object 배열 을 이용 하여 저장 하고 update 방법 을 호출 합 니 다.
@Override
public void saveOrder(Connection conn, Order order) throws Exception {
	String sql="INSERT INTO orders VALUES(?,?,?,?,?,?,?,?)";
	QueryRunner qr=new QueryRunner();
	Object[] params={order.getOid(),order.getOrdertime(),order.getTotal(),order.getState(),order.getAddress(),order.getName(),order.getTelephone(),order.getUser().getUid()};
		qr.update(conn,sql,params);
}

@Override
public void saveOrderItem(Connection conn, OrderItem item) throws Exception {
	String sql="INSERT INTO orderitem VALUES(?,?,?,?,?)";
	QueryRunner qr=new QueryRunner();
	Object[] params={item.getItemid(),item.getQuantity(),item.getTotal(),item.getProduct().getPid(),item.getOrder().getOid()};
	qr.update(conn,sql,params);
}

2. 주문 조회
1. jsp 코드 에서 주문 의 일부 인 자 를 수정 해 야 합 니 다.
header 에서 수정 이 필요 합 니 다:
내 주문서
  2.     
      사용자 정보 가 져 오기
       현재 페이지 가 져 오기
       비 즈 니스 계층 기능 호출: 현재 사용자 의 주문 정 보 를 조회 하고 PageModel 로 돌아 가기
       PageModel 을 request 에 넣 기
       jsp/order list. jsp 로 전송
//findMyOrdersWithPage
public String findMyOrdersWithPage(HttpServletRequest req, HttpServletResponse resp) throws Exception {
		//      
		User user=(User)req.getSession().getAttribute("loginUser");
		//     
		int curNum=Integer.parseInt(req.getParameter("num"));
		//       :          ,  PageModel
		OrderService OrderService=new OrderServiceImp();
		//SELECT * FROM orders WHERE uid=? limit ? , ? 
		//PageModel:1_     2_url  3_           (  ) ,           ,            
		PageModel pm=OrderService.findMyOrdersWithPage(user,curNum);
		// PageModel  request
		req.setAttribute("page", pm);
		//   /jsp/order_list.jsp
		return "/jsp/order_list.jsp";
}

3. OrderServiceImp
       //1 PageModel 대상 생 성, 목적: 페이지 매개 변 수 를 계산 하고 휴대
             <1 > 특정한 사용자 의 주문 항목 이 모두 몇 페이지 로 구성 되 는 지 계산 합 니 다.
             <2 > PageModel 대상 을 형성 합 니 다. 첫 번 째 매개 변 수 는 현재 페이지 의 위치 이 고 두 번 째 매개 변 수 는 모두 얼마 입 니까? 세 번 째 매개 변 수 는 한 페이지 에 몇 개의 상품 이 있 습 니까?
       //2 관련 집합 
             <1 > 데이터 액세스 층 을 호출 합 니 다. 첫 번 째 매개 변 수 는 특정한 사용 자 를 대상 으로 하 는 것 입 니 다. 두 번 째 매개 변 수 는 시작 하 는 요소 이 고 세 번 째 매개 변 수 는 끝 나 는 매개 변수 입 니 다.
       //3 관련 url 
             <1> 
상기 세 가 지 는 페이지 모듈 의 업무 층 템 플 릿 으로 볼 수 있다.
@Override
	public PageModel findMyOrdersWithPage(User user, int curNum) throws Exception {
		//1_  PageModel  ,  :          
		//select count(*) from orders where uid=?
		int totalRecords=orderDao.getTotalRecords(user);
		PageModel pm=new PageModel(curNum, totalRecords, 3);
		//2_      select * from orders where uid=? limit ? ,?
		List list=orderDao.findMyOrdersWithPage(user,pm.getStartIndex(),pm.getPageSize());
		pm.setList(list);
		//3_  url
		pm.setUrl("OrderServlet?method=findMyOrdersWithPage");
		return pm;
	}

4. Order DaoImp (맵 으로 언제 -> 다 중 시 계 를 조작 할 때)
   *_MapListHandler 를 이용 하여 다 중 표를 밀봉 하여 결 과 를 조회 합 니 다.
        List> list02 = qr.query(sql,new MapListHandler(),oid);
        MapListHandler
   *_다 중 표 조회 문
        select * from orderItem o,product p where o.pid=p.pid and o.pid=?
   *_BeanUtils 자동 충전 데이터
        BeanUtils 의 코드 popular 함수 할당 을 이용 합 니 다.
@Override
public List findMyOrdersWithPage(User user, int startIndex, int pageSize) throws Exception {
		String sql="select * from orders where uid=? limit ? , ?";
		QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
		List list=qr.query(sql, new BeanListHandler(Order.class),user.getUid(),startIndex,pageSize);
		
		//      
		for (Order order : list) {
			//       oid                          
			String oid=order.getOid();
			sql="select * from orderItem o ,product p where o.pid=p.pid and oid=?";
			List> list02 = qr.query(sql, new MapListHandler(),oid);
			//  list
			for (Map map : list02) {
				OrderItem orderItem=new OrderItem();
				Product product=new Product();
				//   BeanUtils    "1992-3-3" user   setBithday();         ,   BeanUtils           
				// 1_          
				DateConverter dt = new DateConverter();
				// 2_       
				dt.setPattern("yyyy-MM-dd");
				// 3_     
				ConvertUtils.register(dt, java.util.Date.class);
				
				// map   orderItem        orderItem   
				BeanUtils.populate(orderItem, map);
				// map   product        product   
				BeanUtils.populate(product, map);
				
				//               
				orderItem.setProduct(product);
				//               
				order.getList().add(orderItem);
				
			}
		}
		return list;
}

3. 주문 상세
1. order list. jsp 링크 수정
지불 하 다.
2. findOrderByOid
      주문 oid 가 져 오기 (주문 oid 가 session 에 존재 하지 않 기 때문에 getparameter 에서 직접 값 을 추출 하면 됩 니 다)
      업무 층 기능 호출: 주문 번호 에 따라 주문 정 보 를 조회 합 니 다. 
          자 연 스 럽 게 새로운 실현 이 생각 난다 (ServiceImp)     
          Service. XXX (Dao 층 을 호출 하 는 방법 으로 조회)
          주문 서 를 request 에 넣 기  (request.setAttribute("order",order);
      jsp/order info. jsp 로 전송                                 
public String findOrderByOid(HttpServletRequest req, HttpServletResponse resp) throws Exception {
//		      oid
		String oid = req.getParameter("oid");
		
//		        :            
		OrderService orderService = new OrderServiceImp();
		Order order = orderService.findOrderByOid(oid);
//	           request
		req.setAttribute("order", order);
		
//	         /jsp/order_info.jsp
		return "/jsp/order_info.jsp";
}

3. OrderService -> Dao 계층 코드 직접 호출
@Override
public Order findOrderByOid(String oid) throws Exception {
	return orderDao.findOrderByOid(oid);
		
}

4.OrderDaoImp
   주문 oid 에 따라 현재 주문 조회  
   주문 oid 에 따라 주문 한 모든 주문 항목 과 주문 항목 과 관련 된 상품 을 조회 합 니 다.
       관련 작업: orderItem. setProduct (product); -> order. getList (). add (orderItem) 를 이용 합 니 다.
@Override
public Order findOrderByOid(String oid) throws Exception {
		String sql = "select * from order where id = ?";
		QueryRunner qr = new QueryRunner(JDBCUtils.getDataSource());
//		    oid         
		Order order = qr.query(sql, new BeanHandler(Order.class),oid);

//		    oid                     
		sql = "select * from orderitem o, product p where o.pid=p.pid and oid=?";
		List> list02 = qr.query(sql, new MapListHandler(),oid);
		for (Map map : list02) {
			OrderItem orderItem=new OrderItem();
			Product product=new Product();
			//   BeanUtils    "1992-3-3" user   setBithday();         ,   BeanUtils           
			// 1_          
			DateConverter dt = new DateConverter();
			// 2_       
			dt.setPattern("yyyy-MM-dd");
			// 3_     
			ConvertUtils.register(dt, java.util.Date.class);
			
			// map   orderItem        orderItem   
			BeanUtils.populate(orderItem, map);
			// map   product        product   
			BeanUtils.populate(product, map);
			
			//               
			orderItem.setProduct(product);
			//               
			order.getList().add(orderItem);
		}
		
		return order;
}

요약: 주문 모듈 을 직접 쓸 때 발생 하 는 문제 가 아직도 많 습 니 다. 이것 은 제 정리 입 니 다. 아마 저 만 알 아 볼 수 있 을 것 입 니 다.

좋은 웹페이지 즐겨찾기