자바 웹 온라인 쇼핑 몰 - 주문 실현 부분
11298 단어 자바
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
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
요약: 주문 모듈 을 직접 쓸 때 발생 하 는 문제 가 아직도 많 습 니 다. 이것 은 제 정리 입 니 다. 아마 저 만 알 아 볼 수 있 을 것 입 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.