JavaWeb——Day18_2

来源:互联网 发布:re take 知乎 编辑:程序博客网 时间:2024/06/01 11:13

*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,查找对应的商品,存入listMap<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>


0 0
原创粉丝点击