一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

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

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

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

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

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

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

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

1. 添加新的表
首先我們向數(shù)據(jù)庫中添加幾張表:用戶表、訂單狀態(tài)表、訂單表(購物車表)以及購物項表。用戶表中存有用戶的基本信息,訂單狀態(tài)表中主要存儲訂單的狀態(tài),比如已發(fā)貨這種,訂單表主要存儲用戶的信息和訂單的狀態(tài),所以跟用戶表和訂單狀態(tài)表關(guān)聯(lián),購物項表存儲某個商品以及所屬的訂單,所以跟商品表和訂單表相關(guā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層的邏輯

當(dāng)用戶將某個商品加入購物車時,我們首先要通過商品的id獲取該商品信息,然后將該商品添加到購物車中,在添加之前,我們首先得判斷當(dāng)前session中有沒有購物車,如果沒有的話,我們得先創(chuàng)建一個購物車,如果有,我們將當(dāng)前的購物項添加到購物車?yán)铮谔砑又埃枰扰袛嘣撡徫镯椩谫徫镘囍惺欠褚呀?jīng)存在了,如果存在了只需要增加相應(yī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; //用來標(biāo)記有沒有重復(fù)購物項
  //拿到當(dāng)前的購物項
  Sorder sorder = productToSorder(product);
  //判斷當(dāng)前購物項是否重復(fù),如果重復(fù),則添加數(shù)量即可
  for(Sorder old : forder.getSorders()) {
   if(old.getProduct().getId().equals(sorder.getProduct().getId())) {
    //購物項有重復(fù),添加數(shù)量即可
    old.setNumber(old.getNumber() + sorder.getNumber());
    isHave = true;
    break;
   }
  }
  //當(dāng)前購物項在購物車中不存在,新添加即可
  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> {
 
 //省略其他無關(guān)代碼……
 
 @Resource
 protected ForderService forderService;
 @Resource
 protected SorderService sorderService;
 
}

好了,Service層的邏輯做完了,接下來準(zhǔn)備做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獲取相應(yīng)的商品數(shù)據(jù)
  Product product = productService.get(model.getProduct().getId());
   
  //2. 判斷當(dāng)前session是否有購物車,如果沒有則創(chuàng)建
  if(session.get("forder") == null) {
   //創(chuàng)建新的購物車,存儲到session中
   session.put("forder", new Forder(new HashSet<Sorder>()));
  }
 
  //3. 把商品信息轉(zhuǎn)化為sorder,并且添加到購物車中(判斷購物項是否重復(fù))
  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中關(guān)于購物車部分的前臺程序如下:

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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持服務(wù)器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 美女被扒开屁股进去网 | 国产精品久久久久久久久久久搜索 | 午夜片无码区在线观看 | 欧美一级特黄刺激大片视频 | 日本在线视频免费观看 | 国色天香社区视频免费观看3 | 日本在线看 | 爽爽窝窝午夜精品一区二区 | 成人影院视频 | 久久久亚洲国产精品主播 | 日本免费精品视频 | 喜爱夜蒲2三级做爰 | 俺去啦最新地址 | 美女福利视频一区二区 | 97就去干 | 欧美一级xxxx俄罗斯一级 | 精品一久久香蕉国产线看观 | 亚洲欧美国产精品完整版 | 免费网站看v片在线香蕉 | 国产成人精视频在线观看免费 | 扒开斗罗美女了的胸罩和内裤漫画 | 免费一级片在线观看 | 成人性生交小说免费看 | 精品乱lun小说 | 午夜一区二区三区 | 国产一及毛片 | 国产第2页 | 99 久久99久久精品免观看 | 第一次破苞h | 丝瓜黄瓜茄子西红柿秋葵榴莲 | 校花小雪灌满了男人们的浓浆 | 9久热这里只有精品视频在线观看 | 日韩大片免费观看 | 欧美视频一二三区 | 日韩精品视频福利资源站 | 国产成人性毛片aaww | 国内精品露脸在线视频播放 | 四虎免费影院4hu永久免费 | 美女把小内内脱个精光打屁屁 | 暖暖视频免费观看视频中国.韩剧 | gogo人体模特啪啪季玥图片 |