激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

香港云服务器
服務器之家 - 編程語言 - JAVA教程 - SSH框架網上商城項目第17戰之購物車基本功能

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

2020-05-11 11:29eson_15 JAVA教程

這篇文章主要為大家詳細介紹了SSH框架網上商城項目第17戰之購物車基本功能的實現過程,感興趣的小伙伴們可以參考一下

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
/*============================*/
/* 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中。整個流程見下面的示意圖:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
//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);
}

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//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使用:

?
1
2
3
4
5
6
7
8
9
10
11
12
@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,將上面的邏輯圖上顯示的流程走一遍即可完成添加購物車的邏輯了。代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@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文件:

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

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

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

3. 前臺鏈接的跳轉

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

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

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

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

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

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

延伸 · 閱讀

精彩推薦
457
主站蜘蛛池模板: 日韩av一二三区 | av在线电影网 | 久久电影一区二区 | 欧美三日本三级少妇三级99观看视频 | 国产一区二区精彩视频 | 日本在线播放一区二区 | 性欧美xxxx极品摘花 | 色婷婷一区二区三区 | 精品国产一区二区三区在线观看 | 性爱免费视频 | 91午夜在线观看 | 蜜桃视频最新网址 | 国产午夜精品一区二区三区不卡 | 九色在线78m | 久久久www成人免费精品 | 国产精品伊人久久 | 在线观看福利网站 | 日韩中文字幕三区 | 在线天堂资源 | 日本精品久久久一区二区三区 | 午夜视频在线免费 | 久久午夜国产 | 成人做爽爽爽爽免费国产软件 | 国产91丝袜在线熟 | 国产精品久久久久久久久久久久久久久 | h网站在线观看 | 亚洲成人自拍电影 | 亚洲性生活视频 | 欧美成人精品不卡视频在线观看 | 久草成人在线观看 | 国产免费一区二区三区最新不卡 | 久久综合福利 | 欧美成人免费香蕉 | 黄色电影免费网址 | 欧美一区2区三区4区公司二百 | 日本羞羞的午夜电视剧 | 欧美无极品 | 国产免费让你躁在线视频 | 久久久三级免费电影 | 国产免费让你躁在线视频 | 久草干|