日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

SSH实战 · 唯唯乐购项目(中)

發布時間:2023/12/1 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSH实战 · 唯唯乐购项目(中) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
用戶模塊 三:一級分類的查詢
  • 創建一級分類表并導入基本數據
  • CREATE TABLE `category` ( `cid` int(11) NOT NULL AUTO_INCREMENT, `cname` varchar(255) DEFAULT NULL, PRIMARY KEY (`cid`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;
  • 建包及相應的類:
      • com.weiwei.shopping.category
        • action :CategoryAction
        • service :CategoryService:業務層對象?
        • dao :CategoryDao:持久層對象?
        • vo :Category:實體對象 ;Category.hbm.xml:映射文件?
  • 對Service和DAO進行配置:
      • 在DAO中注入sessionFactory
      • 在Service中注入DAO
  • 需要在IndexAction中注入一級分類的Service.
      • IndexAction ? 調用 ? CategoryService ? 調用 ? CategoryDao
      • 將一級分類的數據顯示到頁面
      • 將一級分類的數據存入到session中:因為之后很多頁面都會用到。
    五:首頁上熱門商品的顯示
  • 建表:
  • 創建二級分類的表: CREATE TABLE `categorysecond` ( `csid` int(11) NOT NULL AUTO_INCREMENT, `csname` varchar(255) DEFAULT NULL, `cid` int(11) DEFAULT NULL, PRIMARY KEY (`csid`), KEY `FK936FCAF21DB1FD15` (`cid`), CONSTRAINT `FK936FCAF21DB1FD15` FOREIGN KEY (`cid`) REFERENCES `category` (`cid`) ) ENGINE=InnoDB AUTO_INCREMENT=41 DEFAULT CHARSET=utf8; 創建商品表: CREATE TABLE `product` ( `pid` int(11) NOT NULL AUTO_INCREMENT, `pname` varchar(255) DEFAULT NULL, `market_price` double DEFAULT NULL, `shop_price` double DEFAULT NULL, `image` varchar(255) DEFAULT NULL, `pdesc` varchar(255) DEFAULT NULL, `is_hot` int(11) DEFAULT NULL, `pdate` datetime DEFAULT NULL, `csid` int(11) DEFAULT NULL, PRIMARY KEY (`pid`), KEY `FKED8DCCEFB9B74E02` (`csid`), CONSTRAINT `FKED8DCCEFB9B74E02` FOREIGN KEY (`csid`) REFERENCES `categorysecond` (`csid`) ) ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8;
  • 建包及相應的類:
      • com.weiwei.shopping.product
        • action :ProductAction
        • service :ProductService:業務層對象?
        • dao :ProductDao:持久層對象?
        • vo :Product:實體對象 ;Product.hbm.xml:映射文件?
  • 對Service和DAO進行配置:
      • 在DAO中注入sessionFactory
      • 在Service中注入DAO
  • 需要在IndexAction中注入商品的Service.
    • IndexAction ?調用 ?ProductService ?調用 ?ProductDao
    • 查詢熱門商品
    • is_hot: 0:不是熱門商品 ?1:是熱門商品;
    • 查詢帶有個數
    • 分頁查詢
    • 將查詢到的數據保存到值棧中
    六:首頁上最新商品的顯示
  • IndexAction? 調用 ? ProductService? 調用 ? ProductDao
    • 查詢最新商品:
    • 按商品上傳日期倒序進行排序 只顯示10個.
    • 將查詢到記錄保存到值棧中:
    七:首頁上點擊商品顯示商品詳情
  • 點擊商品鏈接:
  • * 傳遞商品id.
  • 編寫Action:
  • * 編寫Action類,繼承ActionSupport實現模型驅動接口. * 編寫一個執行的方法.
  • 配置Action:
  • * 在applicationContext.xml中配置Action * 在struts.xml中配置Action
  • 在Action中調用Service完成根據ID進行查詢的方法:
  • * 注入ProductService. * 完成查詢
  • 在頁面上顯示相應數據 :
  • * 頁面轉向 * 修改頁面 * 顯示數據 顯示數據時可以直接通過模型驅動的model對象拿數據。例如: src="${pageContext.request.contextPath}/<s:property?value="model.image"/>" <s:property?value="model.shop_price"/> 八:首頁上點擊一級分類,查詢商品列表:(左側一級分類和二級分類關聯查詢)
  • 創建二級分類的包及類:
      • com.weiwei.shopping.categorysecond
        • action :CategorySecondAction?
        • service :CategorySecondService?
        • dao :CategorySecondDao?
        • vo :CategorySecond?
        • CategorySecond.hbm.xml
  • 配置一級分類和二級分類的關聯關系:
      • Category.xml
    ?<!-- 配置一個二級分類的集合?? 按照編號進行排序? 懶加載默認是true,為了不延遲改為false--> ??? ??????<set?order-by="csid"?name="categorySeconds"?lazy="false"> ??? ??????????<key?column="cid"></key> ??? ??????????<one-to-many?class="com.weiwei.shopping.categorysecond.vo.CategorySecond"/> ??? ??????</set>
      • CategorySecond.hbm.xml
    ? ? ? ? ?? <!-- ? ? ? ? ? ? 相對于一級分類,二級分類是many的一端 :在二級分類中配置many-to-one ? ? ? ? ? ? name:實體類中的屬性 ? ? ? ? ? ? column:表中的外鍵字段 ??? ?????? --> ??? ???????<many-to-one?name="category"?class="com.weiwei.shopping.category.vo.Category"?column="cid"></many-to-one>
  • 點擊一級分類的鏈接:
      • 傳遞一級分類的cid,根據cid查詢所有商品.
  • 編寫Action:
      • 接收cid:
      • 編寫一個執行的方法:因為再ProductService中已經做了FindAll()方法,所以在這里直接注入ProductService 調用方法,然后返回字符串進行頁面跳轉。
      • 在頁面上用迭代標簽迭代顯示左側分類 ;
      • 關聯查找:直接從session中獲得一級分類的數據,需要在映射文件中配置一級分類上二級分類的集合(lazy="false"?);并且為了數據順序不變,按二級分類的遍號排序顯示(order-by="csid"?)。
    九:首頁上點擊一級分類,查詢商品列表:(顯示商品列表)
  • 查詢商品,帶有分頁顯示商品
      • 回到商品列表頁面
      • 需要查詢:商品集合,當前頁數,總頁數(總記錄數),每頁顯示記錄數.( 將后臺的這些數據帶到頁面上,首選:值棧 )
      • 將這些數據封裝到一個分頁類中。(最后將分頁類保存到值棧中就OK)。
  • 在工具包中封裝一個PageBean。
  • 完成查詢:
      • 傳遞當前頁數到ProductAction中,提供set方法;
      • 調用ProductService的FindByPageCid()方法完成查詢;參數:Cid,page;
    方法返回的是PageBean;
  • 配置二級分類和商品關聯關系——類似于一級分類月二級分類的配置。
  • 注意:在頁面上從值棧中、模型驅動取PageBean不用加#;從session中取值需要加#. :商品分類頁面根據二級分類ID查詢商品
  • 點擊二級分類鏈接:
      • 傳遞csid
      • 傳遞page=1
  • 編寫Action :
      • 接收csid:
      • 接收page
  • 調用Service完成查詢:
      • 封裝成PageBean
  • 在頁面中進行顯示
  • 購物車模塊 一:創建表、包結構及映射文件。 二:將商品添加進購物車
  • 封裝購物車對象
    • Cart:購物車對象
      • CartItem的集合
      • total:總計 = 小計相加
      • 功能:
        • 將購物項添加到購物車
        • 從購物車中移出購物項
        • 清空購物車
    ?????/*功能1:將購物項添加到購物車*/ ?????public?void?addCart(CartItem?cartItem){ ??????????/*判斷購物車中是否已經存在該購物項 ?????????? * ??存在: ?????????? * ???????數量增加 ?????????? * ???????總計 = 總計 + 購物項小計 ?????????? * 不存在: ?????????? * ???????向map中添加購物項 ?????????? * ???????總計 = 總計 + 購物項小計 ?????????? * */ ??????????//獲得商品id ??????????Integer?pid?=?cartItem.getProduct().getPid(); ??????????//判斷購物車中是否存在該購物項: ??????????if(map.containsKey(pid)){ ??????????????//存在 ??????????????//獲取原來的購物項 ??????????????CartItem?OcartItem?=?map.get(pid); ??????????????OcartItem.setCount(OcartItem.getCount()?+?cartItem.getCount()); ??????????}?else?{ ??????????????//不存在 ??????????????map.put(pid,?cartItem); ??????????} ??????????//設置總計的值 ??????????total?+=?cartItem.getSubtotal(); ?????}
    • CartItem:購物項
      • Product:商品信息
      • count:購買某種商品的數量
      • subtotal:購買某種商品的小計=單價*數量(Product.shop_price*count)
    ?提示:(1)set集合每添加一個順序就會變化:所以購物車中不用set;若只為顯示購物車,則用list集合就足夠了,但是為了能夠刪除商品,我們選擇用map集合,通過key可以刪除選中商品。 (2)通過JS提交表單:document.getElementById("表單ID").submit(); (3)在購物車中顯示商品:${pageContext.request.contextPath}/<s:property?value="#cartItem.product.image"在頁面上從值棧中取PageBean不用加#;從session中取值需要加#. 三:清空購物車
      • 在CartAction中:
        • 獲得購物車
        • 調用clearCart()方法
      • 在頁面上:
        • 用struts迭代標簽判斷
          • 若購物車為空則不顯示相關按鈕、表單
          • 若不為空則顯示表單、相關商品
    四:移出購物項
      • 點擊頁面的移出鏈接,傳入pid
      • 在CartAction中:
        • 獲得購物車
        • 調用removeCart()方法
    注意: session序列化的異常。 session銷毀三種情況: (1)服務器超時:30分鐘; (2)服務器非正常關閉:如從控制臺直接關tomcat(點stop是正常關閉,啟動會拋序列化異常) (3)手動調用session的銷毀方法(如本項目中的退出功能); 所以讓實體類實現序列化接口就解決了: /*實現序列化的接口,以免服務器拋序列化異常*/ public?class?Cart?implements?Serializable{···} 訂單模塊 一:建表:數據庫設計模塊已完成; 二:創建訂單模塊的包、類:
    • com.weiwei.shopping.order
      • action :OrderAction?
      • service :OrderService?
      • dao :OrderDao?
      • vo :
        • Order?
        • Order.hbm.xml
        • OrderItem
        • OrderItem.hbm.xml
    三:配置:
    • applicationContext.xml
    • 配置映射
    • OrderAction ? 調用 ? OrderService ? 調用 ? OrderDao
    • 實現提交訂單時頁面的跳轉:修改我的購物車頁面的提交按鈕鏈接,再編寫OrderAction、配置struts.xml
    四:訂單頁面數據生成并顯示
    • 生成訂單
      • 保存訂單的數據
      • 在頁面中顯示訂單數據
      • 通過模型驅動的對象將數據傳遞到頁面.(原理還是值棧)
    • 我的訂單
      • 根據用戶的uid查詢當前用戶的所有的訂單
    五:付款
    • 在線付款原理圖:
    本項目采用第二種方式。
    • 在線付款流程分析
    • 本項目付款功能流程
      • 跳轉到頁面:根據訂單的oid查詢訂單.
      • 在頁面中對其進行付款
    • 付款功能的實現
      • 在線支付的方式
      • 在線支付
      • 與第三方支付公司對接:(易寶)
      • 在線支付的流程
      • 付款功能代碼實現
      • 修改訂單數據:(收貨人,地址,電話)
      • 完成付款的功能

    轉載于:https://www.cnblogs.com/panweiwei/p/6245743.html

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的SSH实战 · 唯唯乐购项目(中)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。