当前位置: 首页 > news >正文

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.lryc.cn/news/572099.html

相关文章:

  • 数字华容道智力小游戏微信流量主小程序开源
  • 青少年编程与数学 01-012 通用应用软件简介 02 WPS Office办公软件
  • C#实现语音预处理:降噪、静音检测、自动增益
  • 【JavaEE】HTTPS协议
  • 【unitrix】 3.3 算术取负运算(neg.rs)
  • Kafka副本机制源码深度剖析:从数据同步到故障转移
  • craw14ai 框架的入门讲解和实战指南——基于Python的智能爬虫框架,集成AI(如NLP/OCR)实现自动化数据采集与处理
  • 3.1 Hector_mapping初体验
  • 前端如何通过 Blob 下载 Excel 文件
  • 容器运行时保护:用Falco构建云原生安全防线
  • CFG的前世今生
  • Docker 日志
  • 技术文章大纲:SpringBoot自动化部署实战
  • 《状压DP(01矩阵约束问题)》基础概念
  • 计算机网络:(五)信道复用技术,数字传输系统,宽带接入技术
  • 03 面试官考察与 CAP 有关的分布式理论
  • 开源ChatBI :深入解密 Spring AI Alibaba 的中文NL2SQL智能引擎
  • 基于RAGFlow构建Text2SQL的实战教程
  • 密室出逃消消乐小游戏微信流量主小程序开源
  • 如何将文件从安卓设备传输到电脑?
  • XMOS基于边缘AI+DSP+MCU+I/O智算芯片的音频解决方案矩阵引领行业创新潮流
  • 吴恩达机器学习笔记:正则化2
  • 从Excel到知识图谱再到数据分析:数据驱动智能体构建指南
  • SCRM软件数据分析功能使用指南:从数据挖掘到商业决策
  • Spark 技术与实战学习心得:从入门到实践的深度探索
  • CppCon 2017 学习:Effective Qt: 2017 Edition
  • 锂电池保护板测试仪:守护电池安全的幕后保障
  • 【css】设置了margin-top为负数,div被img覆盖的解决方法
  • django调用 paramiko powershell 获取cpu 个数
  • IPv4编址及IPv4路由基础