国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

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

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

服務器之家 - 編程語言 - JAVA教程 - SSH框架網(wǎng)上商城項目第17戰(zhàn)之購物車基本功能

SSH框架網(wǎng)上商城項目第17戰(zhàn)之購物車基本功能

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

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

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

1. 添加新的表
首先我們向數(shù)據(jù)庫中添加幾張表:用戶表、訂單狀態(tài)表、訂單表(購物車表)以及購物項表。用戶表中存有用戶的基本信息,訂單狀態(tài)表中主要存儲訂單的狀態(tài),比如已發(fā)貨這種,訂單表主要存儲用戶的信息和訂單的狀態(tài),所以跟用戶表和訂單狀態(tài)表關聯(lián),購物項表存儲某個商品以及所屬的訂單,所以跟商品表和訂單表相關聯(lián)。具體的表信息見下面的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: 用戶表結(jié)構(gòu)    */
/*============================*/
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: 訂單狀態(tài)表結(jié)構(gòu)    */
/*=============================*/
create table status
(
 /* 狀態(tài)編號,自動增長 */
 id     int primary key not null auto_increment,
 /* 訂單狀態(tài) */
 status    varchar(10)
);
 
/*=============================*/
/* Table: 購物車(訂單)表結(jié)構(gòu)   */
/*=============================*/
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),
 /* 訂單狀態(tài) */
 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: 購物項表結(jié)構(gòu)    */
/*=============================*/
 
create table sorder
(
 /* 購物項編號,自動增長 */
 id     int primary key not null auto_increment,
 /* 被購買商品的名稱 */
 name    varchar(20),
 /* 購買時商品的價格 */
 price    decimal(8,2),
 /* 購買的數(shù)量 */
 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)
);

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

2. 購物車的后臺邏輯
2.1 Service層的邏輯

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

SSH框架網(wǎng)上商城項目第17戰(zhàn)之購物車基本功能

接下來我們來實現(xiàn)具體的邏輯,首先新建兩個Service接口:SorderService和ForderService。SorderService中主要定義了兩個方法:將用戶添加的商品轉(zhuǎn)換為購物項,然后將購物項添加到購物車;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);
 //把商品數(shù)據(jù)轉(zhuǎn)化為購物項
 public Sorder productToSorder(Product product);
}
//ForderService接口
public interface ForderService extends BaseService<Forder> {
 //計算購物總價格
 public double cluTotal(Forder forder);
}

然后我們具體實現(xiàn)這兩個接口:

?
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實現(xiàn)類
@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);
  //判斷當前購物項是否重復,如果重復,則添加數(shù)量即可
  for(Sorder old : forder.getSorders()) {
   if(old.getProduct().getId().equals(sorder.getProduct().getId())) {
    //購物項有重復,添加數(shù)量即可
    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實現(xiàn)類
@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. 根據(jù)product.id獲取相應的商品數(shù)據(jù)
  Product product = productService.get(model.getProduct().getId());
   
  //2. 判斷當前session是否有購物車,如果沒有則創(chuàng)建
  if(session.get("forder") == null) {
   //創(chuàng)建新的購物車,存儲到session中
   session.put("forder", new Forder(new HashSet<Sorder>()));
  }
 
  //3. 把商品信息轉(zhuǎn)化為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>

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

SSH框架網(wǎng)上商城項目第17戰(zhàn)之購物車基本功能

3. 前臺鏈接的跳轉(zhuǎn)

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

SSH框架網(wǎng)上商城項目第17戰(zhàn)之購物車基本功能

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

SSH框架網(wǎng)上商城項目第17戰(zhàn)之購物車基本功能

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

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

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品久久久久国产a级 九九在线精品视频 | 日韩精品一区二区三区在线观看视频网站 | 久久蜜桃精品一区二区三区综合网 | 成人在线视频网站 | 大桥未久亚洲精品久久久强制中出 | 欧美一级在线 | 国产在线综合网 | 久久久久国产一区二区三区四区 | 99久久精品一区二区成人 | 久久人爱 | 久久综合激情 | 成人高清视频在线观看 | 日韩成人在线观看 | 亚洲精品久久久久久久久久久久久 | 日本精品久久 | 亚洲综合一区二区 | 成人午夜电影在线观看 | 欧美二区三区视频 | 婷婷久久五月 | 一级黄色片视频 | www久草| 精品一区二区电影 | 国产精品国产三级国产aⅴ原创 | 精品视频在线播放 | 二区在线观看 | 久久综合久久综合久久 | 91视频导航| 免费av观看 | 在线观看亚洲区 | 午夜色电影 | 国产一区二区三区久久 | 97色伦97色伦国产欧美空 | www夜夜操 | 久久精品国产一区二区三区不卡 | 亚洲精品久久久久久久久久久久久 | 亚洲国产久 | 九九av| 久久妇女高潮片免费观看 | 日韩精品一区二区三区在线 | 成人综合视频网 | 男人天堂网av |