JavaWeb——Day18_2

*14.Estore_注解1

想做到只要在真正需要事务处理的时候,再调用事务处理,不需要就不用控制。


自定义注解
@interface 定义一个注解
定义出来的注解可以被元注解修饰,确定其基本的特性:
@Retention: 只能用于修饰一个 Annotation 定义, 用于指定该 Annotation 可以保留的域
RetentionPolicy.SOURCE: 编译器直接丢弃这种策略的注释
RetentionPolicy.CLASS: 编译器将把注解记录在 class 文件中. 当运行 Java 程序时, JVM 不会保留注解. 这是默认值
RetentionPolicy.RUNTIME:编译器将把注释记录在 class 文件中. 当运行 Java 程序时, JVM 会保留注解. 程序可以通过反射获取该注释
@Target:指定注解用于修饰类的哪个成员
@Documented: 用于指定被该元 Annotation 修饰的 Annotation 类将被 javadoc 工具提取成文档.
@Inherited: 被它修饰的 Annotation 将具有继承性.如果某个类使用了被 @Inherited 修饰的 Annotation, 则其子类将自动具有该注解


注解中还可以包含属性:
属性的定义类似于在接口中定义一个方法
String name();
String addr() default "xxx";
如果注解中只有一个属性并且名字为value,则在定义注解时可以直接写值而省略value= 部分


反射注解:通过反射注解,来确定某个类方法属性上是否有注解从而控制程序的流转.


*15.Estore_注解2_事务管理改造2








还有问题:








还有BUG!



还需要做个代理:




--希望在Service和dao中都不用操心事务,是否管理事务只需要在Service接口中的方法上写或不写 @Tran就可以控制了


ThreadLocal + 注解 实现事务管理
工厂类+动态代理 实现面向切面编程
利用动态代理,使dao中不需要区分是否开启过事务


*16.Estore_订单列表

订单查询
在主页中 提供 订单查询
OrderListServlet 获取当前客户的用户号,调用Service中查询指定用户订单的方法,查询出这个用户所有订单,存入request域,带到页面显示
OrderService 提供根据用户id查询订单的方法 
OrderDao 提供根据用户id查询订单的方法
orderList.jsp 展示所有订单


订单号 ok
用户名称 --- 用户表中查
订单金额 ok
支付状态 ok
收货地址 ok
下单时间 ok
------------------------------------------------------
商品名称  购买数量  单价  总金额 --------------------------------订单项 表 商品表
------------------------------------------------------
海尔冰箱 1   999   999
美的笔记本 1   888   888
....
...
------------------------------------------------------


public class OrderServiceImpl implements OrderService {
	OrderDao orderDao = BasicFactory.getFactory().getDao(OrderDao.class);
	ProdDao prodDao = BasicFactory.getFactory().getDao(ProdDao.class);
	UserDao userDao = BasicFactory.getFactory().getDao(UserDao.class);
	
	public void addOrder(Order order) {
		try{
			//1.生成订单
			orderDao.addOrder(order);
			//2.生成订单项/扣除商品数量
			for(OrderItem item : order.getList()){
				orderDao.addOrderItem(item);
				prodDao.delPnum(item.getProduct_id(),item.getBuynum());
			}
		}catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

	public List<OrderListForm> findOrders(int user_id) {
		try{

			List<OrderListForm> olfList = new ArrayList<OrderListForm>();
			//1.根据用户id查询这个id用户的所有订单
			List<Order> list = orderDao.findOrderByUserId(user_id);
			//2.遍历订单 生成orderListForm对象,存入List中
			for(Order order : list){
				//--设置订单信息
				OrderListForm olf = new OrderListForm();
				BeanUtils.copyProperties(olf, order);
				//--设置用户名
				User user = userDao.findUserById(order.getUser_id());
				olf.setUsername(user.getUsername());
				//--设置商品信息
				//----查询当前订单所有订单项
				List<OrderItem> itemList = orderDao.findOrderItems(order.getId());
				//----遍历所有订单项,获取商品id,查找对应的商品,存入list
				Map<Product,Integer> prodMap = new HashMap<Product,Integer>();
				for(OrderItem item : itemList){
					String prod_id = item.getProduct_id();
					Product prod = prodDao.findProdById(prod_id);
					prodMap.put(prod, item.getBuynum());
				}
				olf.setProdMap(prodMap);
				
				olfList.add(olf);
			}
			
			return olfList;
		}catch (Exception e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
	}

}


显示查询订单的界面:

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>
  <body>
  	<h1>订单列表</h1><hr>
  	<c:forEach items="${requestScope.list}" var="olf">
  		<h3>
  		订单号:${olf.id }<br>
  		</h3>
		用户名称 :${olf.username }<br>
		订单金额 :${olf.money }<br>
		支付状态 :
			<c:if test="${olf.paystate == 0}">
				<font color="red">未支付</font>
			</c:if>
			<c:if test="${olf.paystate != 0}">
				<font color="blue">已支付</font>
			</c:if>
		<br>
		收货地址 :${olf.receiverinfo }<br>
		下单时间 :${olf.ordertime }<br>
		<table width="100%" border="1">
			<tr>
				<th>商品名称</th>
				<th>商品种类</th>
				<th>购买数量</th>
				<th>商品单价</th>
				<th>总金额</th>
			</tr>	
			<c:forEach items="${olf.prodMap}" var="entry">
				<tr>
					<td>${entry.key.name }</td>
					<td>${entry.key.category }</td>
					<td>${entry.value }</td>
					<td>${entry.key.price }</td>
					<td>${entry.key.price * entry.value }</td>
				</tr>
			</c:forEach>
		</table>
		<hr>
  	</c:forEach>
  </body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值