订单查询功能的实现,用beanutils,自动填充匹配的属性值。

创建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);```


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值