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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 格式作为制造业通用的数据交换标准&…