SpringBoot電腦商城項目--收獲地址列表

1. 收獲地址列表展示-持久層

1.1 sql語句

 

1.2 AddressMapper接口編寫抽象方法

    /*** 根據用戶id查詢用戶的收貨地址數據* @param uid* @return*/List<Address> findByUid(Integer uid);

1.3 在xml文件中進行sql映射

<!--    DESC降序    --><select id="findByUid" resultMap="AddressEntityMap">SELECT * FROM t_address WHERE uid=#{uid}ORDER BY is_default DESC, created_time DESC</select>

1.4 測試

? ? ? ? 在AddressMapperTest測試類進行測試

    @Testvoid findByUid() {List<Address> list = addressMapper.findByUid(1);System.out.println(list);}

2.?收獲地址列表展示-業務層

2.1 處理異常

? ? ? ? 這里沒有需要考慮處理的異常

2.2 AddressService類編寫抽象方法

    /*** 根據用戶id查詢用戶的收貨地址數據* @param uid 用戶id* @return 當前用戶的收貨地址數據列表*/List<Address> findByUid(Integer uid);

2.3 實現類實現抽象方法

? ? ? ? 需要注意的是,數據庫的數據體量很大,為了減小體量,提高效率,將前端用不到的數據封裝成null。

    /*** 根據用戶id查詢用戶的收貨地址數據* @param uid 用戶id* @return 收貨地址數據列表*/@Overridepublic List<Address> findByUid(Integer uid) {List<Address> list = addressMapper.findByUid(uid);for (Address address : list) {address.setAid( null);address.setUid(null);address.setProvinceCode(null);address.setCityCode(null);address.setAreaCode(null);address.setIsDefault(null);address.setTel( null);address.setCreatedUser(null);address.setCreatedTime(null);address.setModifiedUser(null);address.setModifiedTime(null);}return list;}

2.4 測試

3. 收獲地址列表展示-控制層

3.1 設計請求

請求路徑:/addresses

請求參數:/HttpSession session

請求方式:GET

請求返回對象:JsonResult<List<Address>>

3.2 在controller類中接收請求,編寫業務代碼

? ? ? ? 在session中獲取用戶的id,通過uid獲取當前登錄用戶的收貨地址信息

    @RequestMappingpublic JsonResult<List<Address>> getByUid(HttpSession session){Integer uid = getUidFromSession(session);List<Address> data = addressService.findByUid(uid);return new JsonResult<>(OK,data);}

3.3 啟動項目進行測試

4.?收獲地址列表展示-前端頁面

? ? ? ? 代碼如下:????????

? ? ? ? html

<div class="panel-body"><!--地址顯示--><table class="table table-striped"><caption>收貨地址列表</caption><thead><tr><th>地址類型</th><th>收貨人姓名</th><th>詳細地址</th><th>聯系電話</th><th colspan="3">操作</th></tr></thead><tbody id="address-list"><tr><td>家</td><td>八戒</td><td>北京市房山區高老莊3排6號</td><td>1380***1234</td><td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td><td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td><td><a class="btn btn-xs add-def btn-default">設為默認</a></td></tr><tr><td>公司</td><td>八戒</td><td>北京市海淀區中關村中路1號1001室</td><td>1380***1234</td><td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td><td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td><td><a class="btn btn-xs add-def btn-default">設為默認</a></td></tr><tr><td>宿舍</td><td>八戒</td><td>北京市海淀區永豐鎮30號</td><td>1380***1234</td><td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>--><td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td>--><td><a class="btn btn-xs add-def btn-default">設為默認</a></td>--></tr></tbody></table><a href="addAddress.html" class="btn btn-sm btn-primary"><span class="fa fa-plus"></span>新增收貨地址</a></div>

? ? ? ? ?js

  • 當頁面加載時就需要展示收貨地址列表
  • 后端傳到前端的是list集合,需要遍歷操作,將數據封裝到tr上
  • <td>#{tag}</td>進行占位,replace方法進行替換,替換完成之后將其追加到address-list上進行展示
  • 默認收貨地址需要進行隱藏
<script type="text/javascript">$(document).ready(function() {//	頁面一加載就調用方法showAddressList();})function showAddressList() {$.ajax({url: "/addresses",type: "GET",dataType: "json",success: function (json) {if (json.state == 200) {// 獲取省列表,包括所喲省名稱let list = json.data;// 遍歷省列表for (let i = 0; i < list.length; i++) {// #{tag} 占位符let tr = '<tr>\n' +'<td>#{tag}</td>\n' +'<td>#{name}</td>\n' +'<td>#{address}</td>\n' +'<td>#{phone}</td>\n' +'<td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>\n' +'<td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td>\n' +'<td><a class="btn btn-xs add-def btn-default">設為默認</a></td>\n' +'</tr>'//	將列表的tr清空,替代成新的tr//	replace() 替換tr = tr.replace("#{tag}", list[i].tag)tr = tr.replace("#{name}", list[i].name)tr = tr.replace("#{address}", list[i].address)tr = tr.replace("#{phone}", list[i].phone)//	替換完成之后,將tr追加到address-list列表中$("#address-list").append(tr)}//	按照降序排列的話,第一項是設置的默認項,那么”設為默認地址“這個按鈕應該隱藏//	將某個元素隱藏使用hide()方法$(".add-def:eq(0)").hide();}else{alert("用戶收貨地址列表加載失敗")}}})}</script>

? ? ? ? 將寫死的默認數據注釋掉就好?

<tbody id="address-list">
<!--								<tr>-->
<!--									<td>家</td>-->
<!--									<td>八戒</td>-->
<!--									<td>北京市房山區高老莊3排6號</td>-->
<!--									<td>1380***1234</td>-->
<!--									<td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>-->
<!--									<td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td>-->
<!--									<td><a class="btn btn-xs add-def btn-default">設為默認</a></td>-->
<!--								</tr>-->
<!--								<tr>-->
<!--									<td>公司</td>-->
<!--									<td>八戒</td>-->
<!--									<td>北京市海淀區中關村中路1號1001室</td>-->
<!--									<td>1380***1234</td>-->
<!--									<td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>-->
<!--									<td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td>-->
<!--									<td><a class="btn btn-xs add-def btn-default">設為默認</a></td>-->
<!--								</tr>-->
<!--								<tr>-->
<!--									<td>宿舍</td>-->
<!--									<td>八戒</td>-->
<!--									<td>北京市海淀區永豐鎮30號</td>-->
<!--									<td>1380***1234</td>-->
<!--									<td><a class="btn btn-xs btn-info"><span class="fa fa-edit"></span> 修改</a></td>-->
<!--									<td><a class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td>-->
<!--									<td><a class="btn btn-xs add-def btn-default">設為默認</a></td>-->
<!--								</tr>--></tbody>

? ? ? ? 重啟項目登錄運行,測試功能

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/909860.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/909860.shtml
英文地址,請注明出處:http://en.pswp.cn/news/909860.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學校住宿繳費系統h5-——東方仙盟——仙盟創夢IDE

代碼: <div class"form-group"><h4 style"color: #006400; margin-bottom: 15px;">費用明細 <input name"room_unit_price" id"room_unit_price" type"number" value"" style"width:65px;…

docker 目錄更改,必須做數據遷移才能啟動

要修改 Docker 鏡像的存儲位置 并遷移數據&#xff08;如從 /var/lib/docker 遷移到 /mnt/data/docker&#xff09;&#xff0c;需要以下步驟&#xff1a; 1. 停止 Docker 服務 在修改配置和遷移數據前&#xff0c;先停止 Docker 服務&#xff1a; sudo systemctl stop docke…

根據圖片理解maven

maven 是一款強大的項目管理與構建工具&#xff0c;在 Java 開發中尤為常用&#xff0c;結合這張圖&#xff0c;從核心功能、倉庫體系、工作流程三方面快速了解&#xff1a; 一、核心作用 項目構建&#xff1a;自動完成編譯、測試、打包、部署等流程&#xff08;比如把 .java…

阿里云中間件:解鎖云端應用的強大引擎

走進阿里云中間件 在云計算的宏大版圖中&#xff0c;阿里云無疑是一位舉足輕重的參與者。而阿里云中間件&#xff0c;作為阿里云服務體系的關鍵構成部分&#xff0c;在整個云計算架構里扮演著不可或缺的角色&#xff0c;宛如一座橋梁&#xff0c;緊密地連接著底層基礎設施與上…

windows下FFmpeg精簡

1. 安裝MSYS2和必要工具 下載并安裝MSYS2打開 MSYS2中的 MinGW 64-bit 終端更新系統包&#xff1a; pacman -Syu # 如果提示關閉終端&#xff0c;關閉后重新打開再次運行&#xff1a; pacman -Su裝編譯工具鏈&#xff1a; pacman -S --needed base-devel mingw-w64-x86_64-t…

WPF數據綁定疑惑解答--(關于控件的Itemsource,Collection綁定)

1. ListView綁定的數據類型問題 在 MainWindow 的構造函數中綁定 List11.ItemsSource List<string> rpcListnew List<string>(); public MainWindow() {InitializeComponent();// 確保 List11 的 ItemsSource 已經綁定到 rpcListList11.ItemsSource rpcList; } …

【Centos7安裝Cloudera Manager5.12、CDH5.12詳細步驟】

安裝Cloudera Manager&#xff08;5.12.1&#xff09;一定要細心&#xff0c;每一步走錯都可能造成最終安裝失敗。 安裝Cloudera Manager&#xff08;5.12.1&#xff09;一定要硬件資源充足。 本示例參考了眾多網上資料&#xff08;放在文末&#xff09;&#xff0c;消耗了1000…

青少年編程與數學 01-011 系統軟件簡介 25 Web服務器及代理軟件

青少年編程與數學 01-011 系統軟件簡介 25 Web服務器及代理軟件 一、Web 服務器軟件&#xff08;一&#xff09;定義與功能&#xff08;二&#xff09;歷史與主要產品1. Apache HTTP Server2. Nginx3. Microsoft Internet Information Services&#xff08;IIS&#xff09;4. L…

Vue的隱形魔法:虛擬DOM和Diff算法如何讓頁面飛起來?

大家好&#xff0c;我是江城開朗的豌豆&#xff0c;一名擁有6年以上前端開發經驗的工程師。我精通HTML、CSS、JavaScript等基礎前端技術&#xff0c;并深入掌握Vue、React、Uniapp、Flutter等主流框架&#xff0c;能夠高效解決各類前端開發問題。在我的技術棧中&#xff0c;除了…

SAP_HANA常用sql合集——持續更新中

一、時間格式轉換 (1)切換日期格式yyyymmdd的字段數據為yyyy-mm-dd select TO_VARCHAR(TO_DATE(t1.time1, YYYYMMDD), YYYY-MM-DD) AS time1, TO_VARCHAR(TO_DATE(t1.time2, YYYYMMDD), YYYY-MM-DD) AS time2 from table

【AI Study】第四天,Pandas(5)- 數據可視化

文章概要 本文詳細介紹 Pandas 的數據可視化功能&#xff0c;包括&#xff1a; 基礎繪圖高級可視化統計圖表實際應用示例 基礎繪圖 折線圖 # 基本折線圖 df.plot(x日期, y值) df.plot.line(x日期, y值)# 多列折線圖 df.plot(x日期, y[列1, 列2])# 自定義樣式 df.plot(x日期…

Linux故障排查

目錄 案例1&#xff1a;GRUB引導故障 案例2&#xff1a;文件系統只讀故障 案例3&#xff1a;OOM Killer觸發 案例4&#xff1a;系統啟動卡住&#xff08;initramfs損壞&#xff09; 案例5&#xff1a;磁盤空間耗盡 案例6&#xff1a;SSH登錄緩慢 案例7&#xff1a;邏輯卷…

pikachu靶場通關筆記36 越權01之水平越權

目錄 一、水平越權 二、賬戶功能探測 1、登錄賬號lucy 2、登錄賬號lili 3、登錄賬號kobe 三、源碼分析 四、滲透實戰 1、登錄lucy賬號 2、越權訪問lili賬戶資料 3、越權訪問kobe賬戶資料 本系列為《pikachu靶場通關筆記》滲透實戰&#xff0c;本文通過對越權關卡源碼…

javaweb -Ajax

Ajax的定義 Ajax&#xff08;Asynchronous JavaScript and XML&#xff09;是一種用于創建異步 Web 應用的技術&#xff0c;允許網頁在不重新加載整個頁面的情況下與服務器交換數據并更新部分內容。 Ajax的核心特點 異步通信&#xff1a;通過后臺與服務器交互&#xff0c;用…

11.OpenCV—聯合QT環境配置

1.QT環境變量配置 在Qt中配置OpenCV 3.4.6與Visual Studio 2017的步驟如下&#xff1a; 一、前期準備 安裝組件驗證 確認已安裝Qt的MSVC2017版本&#xff08;如Qt 5.12 MSVC2017 64-bit&#xff09; 檢查Visual Studio 2017的MSVC編譯器是否正常工作 OpenCV庫準備 從官網…

2025虛幻引擎一般用什么模型格式

2025虛幻引擎一般用什么模型格式 前言 積累了一些人物模型發現有的有骨骼&#xff0c;有的沒骨骼&#xff0c;有的要轉換格式&#xff0c;有的直接可以用&#xff0c;所以了解一下各種模型。 2025虛幻人物模型積累 格式轉換真麻煩。 2025.uexp、.uasset文件、.ubulk如何打…

電腦在使用過程中頻繁死機怎么辦

正興致勃勃地打游戲&#xff0c;或者趕著完成一份重要的工作文檔&#xff0c;電腦突然死機了&#xff0c;鼠標動不了&#xff0c;鍵盤也沒反應&#xff0c;只能干瞪眼干著急。電腦在使用過程中頻繁死機&#xff0c;真的太影響心情和效率了。今天咱就來好好聊聊&#xff0c;遇到…

【Java_EE】設計模式

設計模式&#xff1a;解決一些固定場景的固定套路&#xff0c;是一種代碼風格的知道指南。設計模式不止23種 1、單例設計模式 單例設計模式&#xff1a;確保一個類只有一個實例&#xff0c;提供全局訪問點 單例模式的實現方式&#xff1a; 1&#xff1a;餓漢模式 /*** 餓漢…

Nginx代理緩存靜態資源

問題描述 有兩臺服務器&#xff0c;一臺是外網的網關服務器&#xff0c;一臺是內網的資源服務器&#xff0c;但是兩臺服務器距離很遠&#xff08;跨省&#xff09;&#xff0c;頁面中依賴大量插件資源&#xff0c;加載耗時久&#xff0c;本章重點講解Nginx代理緩存靜態資源。 …

Blender 轉換為 STP:軟件操作與迪威模型網在線轉換全指南

在三維設計與工程制造領域&#xff0c;不同格式的文件承擔著各自的使命。Blender 作為一款功能強大且開源的三維建模軟件&#xff0c;被眾多設計師、藝術家以及學生廣泛使用&#xff0c;能夠創作出風格多樣、細節豐富的三維模型。而 STP 格式作為制造業通用的數據交換標準&…