创建pojo
创建订单order,订单详情orderItem,商品product三个pojo
因为order表中的主键oid是orderitem的外键,而orderitem表页包含pid,即product的主键。而一个订单有多个订单详情,一个订单详情只有一种商品。所以按照面向对象的思想,需要分别在order内创建属性List<orderItem>
,在orderItem内创建属性product。其他的就按照数据库的属性创建对象的属性。
###order
private String oid;
private Date ordertime;
private double total;
private int state;
private String address;
private String name;
private String telephone;
private User user;
private List<OrderItem> orderItem=new ArrayList<OrderItem>();
public String getOid() {
return oid;
}
public void setOid(String oid) {
this.oid = oid;
}
public Date getOrdertime() {
return ordertime;
}
public void setOrdertime(Date ordertime) {
this.ordertime = ordertime;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public int getState() {
return state;
}
public void setState(int state) {
this.state = state;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTelephone() {
return telephone;
}
public void setTelephone(String telephone) {
this.telephone = telephone;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
public List<OrderItem> getOrderItem() {
return orderItem;
}
public void setOrderItem(List<OrderItem> orderItem) {
this.orderItem = orderItem;
}
public Order(String oid, Date ordertime, double total, int statel, String address, String name, String telephone,
User user, List<OrderItem> orderItem) {
super();
this.oid = oid;
this.ordertime = ordertime;
this.total = total;
this.state = statel;
this.address = address;
this.name = name;
this.telephone = telephone;
this.user = user;
this.orderItem = orderItem;
}
public Order() {
super();
// TODO Auto-generated constructor stub
}
###orderItem
private String itemid;
private int quantity;
private double total;
private Product product;
private Order order;
public Order getOrder() {
return order;
}
public void setOrder(Order order) {
this.order = order;
}
public String getItemid() {
return itemid;
}
public void setItemid(String itemid) {
this.itemid = itemid;
}
public int getQuantity() {
return quantity;
}
public void setQuantity(int quantity) {
this.quantity = quantity;
}
public double getTotal() {
return total;
}
public void setTotal(double total) {
this.total = total;
}
public Product getProduct() {
return product;
}
public void setProduct(Product product) {
this.product = product;
}
public OrderItem(String itemid, int quantity, double total, Product product, Order order) {
super();
this.itemid = itemid;
this.quantity = quantity;
this.total = total;
this.product = product;
this.order = order;
}
public OrderItem() {
super();
// TODO Auto-generated constructor stub
}```
# 前端传数据
在后端需要完成通过uid查到oid,然后通过oid完成对订单详情的查询。因为订单详情是对应用户的,所以要求用户的状态必须是登陆的,而用户的信息是存在session中,所以可以直接从session中获取。
# servlet实现对数据的接收,和转发
1,获取uid,当前页。
2,调用service,获取pagemodel。
3,完善pagemodel并将pagemodel传入前端
4,跳转到order_list.jsp页面
``` public String findAllOrder(HttpServletRequest request, HttpServletResponse response) throws Exception {
//获取当前页
int num = Integer.parseInt(request.getParameter("num"));
//获取用户信息
User user = (User)request.getSession().getAttribute("user");
//调用orderservice。获取pagemodel
OrderService orderService=new OrderServiceImp();
PageModel page=orderService.fidAllOrder(num,user.getUid());
//设置url
page.setUrl("/OrderServlet?method=findAllOrder&num="+num+"&uid="+user.getUid());
request.setAttribute("page", page);
return "/jsp/order_list.jsp";
}```
# service实现
1,调用dao获取总订单数,订单,订单详情,商品信息。
2,将pagemodel的对象创建出来。
3,将```List<order>```添加进pagemodel
4,返回pagemodel给servlet
``` public PageModel fidAllOrder(int currentPage, String uid) throws Exception {
// TODO Auto-generated method stub
//因为pagemodel需要三个参数才能创建:当前页,总页数,每页条数,当前页和每页条数已知,先在需要调用dao获取总共页数
int totalRecords=orderDao.fidOrderListByUid(uid);
//创建pagemodel
PageModel pageModel=new PageModel(currentPage,totalRecords,4);
//调用dao获取每页的list
List<Order> preOrderList=orderDao.fidPreOrderList(uid,pageModel);
pageModel.setList(preOrderList);
return pageModel;
}```
# dao实现对数据库的操作
要创建俩个dao,一个用来查询该用户的订单条数,另一个用来查询订单详情和商品信息
``` public int fidOrderListByUid(String uid) throws SQLException {
// TODO Auto-generated method stub
QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
String sql="select count(*) from orders where uid=?";
Long query = (Long) qr.query(sql, new ScalarHandler(),uid);
return query.intValue();
}
public List fidPreOrderList(String uid, PageModel pagemodel) throws Exception {
// TODO Auto-generated method stub
QueryRunner qr=new QueryRunner(JDBCUtils.getDataSource());
List<Order> list = qr.query("select * from orders where uid= ? limit ?,?", new BeanListHandler<Order>(Order.class),uid,pagemodel.getStartIndex(),pagemodel.getPageSize());
//遍历获得该用户的所有订单
for (Order order : list) {
String oid = order.getOid();
String sql01="select * from orderitem o,product p where o.pid=p.pid and o.oid=?";
List<Map<String, Object>> list2 = qr.query(sql01, new MapListHandler(),oid);
for (Map<String, Object> order2 : list2) {
OrderItem orderItem=new OrderItem();
Product product=new Product();
//用beanutil的包含时间步骤
//1,创建一个时间类型转换器
DateConverter dt=new DateConverter();
//2设置转换格式
dt.setPattern("yyy-MM-dd");
//3,注册转换器
ConvertUtils.register(dt, java.util.Date.class);
//将map数据自动填充到product和orderitem中
BeanUtils.populate(product, order2);
BeanUtils.populate(orderItem, order2);
//设置order item的product
orderItem.setProduct(product);
order.getOrderItem().add(orderItem);
}
}
return list;
}```
# 需要用的工具涉及到的新知识点
自动填装数据:BeanUtlis,
```查询数据库返回List<Map<>>集合List<Map<String, Object>> list2 = qr.query(sql01, new MapListHandler(),oid);```