程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> SSH框架網上商城項目第17戰之購物車根本功效

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

編輯:關於JAVA

SSH框架網上商城項目第17戰之購物車根本功效。本站提示廣大學習愛好者:(SSH框架網上商城項目第17戰之購物車根本功效)文章只能為提供參考,不一定能成為您想要的結果。以下是SSH框架網上商城項目第17戰之購物車根本功效正文


上一節我們將商品的具體頁面做完了,並應用了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
以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved