国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

SSH框架網上商城項目第17戰之購物車基本功能

2019-11-26 14:14:41
字體:
來源:轉載
供稿:網友

上一節我們將商品的詳細頁面做完了,并使用了Hibernate的二級緩存加載詳細頁面來提高系統的性能,點擊文章查看:。這節我們開始做購物車部分。

1. 添加新的表
首先我們向數據庫中添加幾張表:用戶表、訂單狀態表、訂單表(購物車表)以及購物項表。用戶表中存有用戶的基本信息,訂單狀態表中主要存儲訂單的狀態,比如已發貨這種,訂單表主要存儲用戶的信息和訂單的狀態,所以跟用戶表和訂單狀態表關聯,購物項表存儲某個商品以及所屬的訂單,所以跟商品表和訂單表相關聯。具體的表信息見下面的sql語句:

/*============================*/ /* Table: 用戶表結構    */ /*============================*/ create table user (  /* 用戶編號,自動增長 */  id     int primary key not null auto_increment,  /* 用戶登錄名 */  login    varchar(20),  /* 用戶真實姓名 */  name    varchar(20),  /* 用戶登錄密碼 */  pass    varchar(20),  /* 用戶性別 */  sex     varchar(20),  /* 用戶電話 */  phone    varchar(20),  /* 用戶Email */  email    varchar(20) );  /*=============================*/ /* Table: 訂單狀態表結構    */ /*=============================*/ create table status (  /* 狀態編號,自動增長 */  id     int primary key not null auto_increment,  /* 訂單狀態 */  status    varchar(10) );  /*=============================*/ /* Table: 購物車(訂單)表結構   */ /*=============================*/ create table forder (  /* 訂單編號,自動增長 */  id     int primary key not null auto_increment,  /* 收件人名字 */  name    varchar(20),  /* 收件人電話 */  phone    varchar(20),  /* 配送信息 */  remark    varchar(20),  /* 下單日期 */  date    timestamp default CURRENT_TIMESTAMP,  /* 訂單總金額 */  total    decimal(8,2),  /* 收件人郵編 */  post    varchar(20),  /* 收件人郵編 */  address    varchar(200),  /* 訂單狀態 */  sid     int default 1,  /* 會員編號 */  uid     int,  constraint sid_FK foreign key(sid) references status(id),  constraint uid_FK foreign key(uid) references user(id) );  /*=============================*/ /* Table: 購物項表結構    */ /*=============================*/  create table sorder (  /* 購物項編號,自動增長 */  id     int primary key not null auto_increment,  /* 被購買商品的名稱 */  name    varchar(20),  /* 購買時商品的價格 */  price    decimal(8,2),  /* 購買的數量 */  number    int not null,  /* 所屬商品編號 */  pid     int,  /* 此訂單項,所屬的訂單編號 */  fid     int,  constraint pid_FK foreign key(pid) references product(id),  constraint fid_FK foreign key(fid) references forder(id) ); 

然后我們將這些表通過逆向工程轉換為POJO,具體不在贅述。

2. 購物車的后臺邏輯
2.1 Service層的邏輯
當用戶將某個商品加入購物車時,我們首先要通過商品的id獲取該商品信息,然后將該商品添加到購物車中,在添加之前,我們首先得判斷當前session中有沒有購物車,如果沒有的話,我們得先創建一個購物車,如果有,我們將當前的購物項添加到購物車里,在添加之前,需要先判斷該購物項在購物車中是否已經存在了,如果存在了只需要增加相應的購物數量即可,如果不存在則添加,然后計算購物總價格,最后將購物車存到session中。整個流程見下面的示意圖:

接下來我們來實現具體的邏輯,首先新建兩個Service接口:SorderService和ForderService。SorderService中主要定義了兩個方法:將用戶添加的商品轉換為購物項,然后將購物項添加到購物車;ForderService中主要定義了計算購物車總價格的方法,如下:

//SorderService接口 public interface SorderService extends BaseService<Sorder> {  //添加購物項,返回新的購物車  public Forder addSorder(Forder forder, Product product);  //把商品數據轉化為購物項  public Sorder productToSorder(Product product); } //ForderService接口 public interface ForderService extends BaseService<Forder> {  //計算購物總價格  public double cluTotal(Forder forder); } 

然后我們具體實現這兩個接口:

//SorderServiceImpl實現類 @Service("sorderService") public class SorderServiceImpl extends BaseServiceImpl<Sorder> implements   SorderService {   @Override  public Forder addSorder(Forder forder, Product product) {   boolean isHave = false; //用來標記有沒有重復購物項   //拿到當前的購物項   Sorder sorder = productToSorder(product);   //判斷當前購物項是否重復,如果重復,則添加數量即可   for(Sorder old : forder.getSorders()) {    if(old.getProduct().getId().equals(sorder.getProduct().getId())) {     //購物項有重復,添加數量即可     old.setNumber(old.getNumber() + sorder.getNumber());     isHave = true;     break;    }   }   //當前購物項在購物車中不存在,新添加即可   if(!isHave) {    forder.getSorders().add(sorder);   }   return forder;  }   @Override  public Sorder productToSorder(Product product) {   Sorder sorder = new Sorder();   sorder.setName(product.getName());   sorder.setNumber(1);   sorder.setPrice(product.getPrice());   sorder.setProduct(product);   return sorder;  } }  //ForderServiceImpl實現類 @Service("forderService") public class ForderServiceImpl extends BaseServiceImpl<Forder> implements ForderService {   @Override  public double cluTotal(Forder forder) {    double total = 0.0;   for(Sorder sorder : forder.getSorders()) {    total += sorder.getNumber() * sorder.getPrice();   }   return total;  }   } 

 然后我們需要將這兩個bean注入到BaseAction中,供SorderAction使用:

@Controller("baseAction") @Scope("prototype") public class BaseAction<T> extends ActionSupport implements RequestAware,SessionAware,ApplicationAware,ModelDriven<T> {   //省略其他無關代碼……   @Resource  protected ForderService forderService;  @Resource  protected SorderService sorderService;  } 

好了,Service層的邏輯做完了,接下來準備做Action部分:
2.2 Action部分的邏輯
我們新建一個SorderAction,將上面的邏輯圖上顯示的流程走一遍即可完成添加購物車的邏輯了。代碼如下:

@Controller @Scope("prototype") public class SorderAction extends BaseAction<Sorder> {  public String addSorder() {      //1. 根據product.id獲取相應的商品數據   Product product = productService.get(model.getProduct().getId());      //2. 判斷當前session是否有購物車,如果沒有則創建   if(session.get("forder") == null) {    //創建新的購物車,存儲到session中    session.put("forder", new Forder(new HashSet<Sorder>()));   }    //3. 把商品信息轉化為sorder,并且添加到購物車中(判斷購物項是否重復)   Forder forder = (Forder) session.get("forder");   forder = sorderService.addSorder(forder, product);      //4. 計算購物的總價格   forder.setTotal(forderService.cluTotal(forder));   //5. 把新的購物車存儲到session中   session.put("forder", forder);   return "showCart";  } } 

配置一下struts.xml文件:

<action name="sorder_*" class="sorderAction" method="{1}">  <result name="showCart">/showCart.jsp</result> </action> 

然后跳轉到購物車顯示頁面showCart.jsp,showCart.jsp中關于購物車部分的前臺程序如下:


3. 前臺鏈接的跳轉

后臺部分全部做完了,接下來將前臺detail.jsp頁面添加購物車的鏈接地址該成訪問SorderAction即可:


這樣就能正確跳轉了,下面我們看一下購物車顯示頁面的具體效果:

這樣我們購物車的基本功能就做完了,后面我們再對其做一些完善。

原文地址:http://blog.csdn.net/eson_15/article/details/51418350
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄山市| 健康| 泾源县| 兴业县| 拉萨市| 虞城县| 高平市| 磐安县| 志丹县| 沈阳市| 建昌县| 淮安市| 常山县| 柳林县| 镇坪县| 乃东县| 增城市| 庆安县| 河北区| 石泉县| 贡山| 开化县| 普安县| 寿阳县| 张家界市| 微博| 文水县| 伊宁市| 甘南县| 平江县| 临江市| 平罗县| 罗江县| 曲阜市| 山丹县| 湘潭县| 榆林市| 榆林市| 宣汉县| 广昌县| 湘潭县|