苍穹外卖Day09 地址簿模块

这一块比较简单就是一个表的增删改查,也不涉及别的知识,所以黑马就是带着我们导入了一下代码,所以这里做点简单的解释就过去了。

首先看下效果图:

简单来说包括以下几点功能:

1.查询当前登录用户的所有地址

2.查询当前登录用户的默认地址

3.新增地址

4.根据id查询地址

5.根据id查询地址

6.设置为默认地址

7.根据id删除地址

一、查询用户所有收货地址

接口文档如下:

显然这里我们需要新建一个AddressBookController这里的返回值应该新建一个VO对象如下所示:

之后就是本质就是一个根据用户ID查地址表的操作,由于用户可能不止一个收货地址所以查出来的是一个List,controller层代码如下:

当前用户的ID存在了threadlocal中,这里传入addressbook对象进行查找而不是只用一个id查,因为可以用动态SQL以后可以复用!

service层仅仅单纯调用了mapper层的查找所以这里直接放mapper层的代码:

多出的两个条件,一个是之后查询默认地址可以复用,还有一个是精确查找通过手机号!

二、查找用户默认收货地址

其实和上面基本一致,只不过我们在封装addressbook的时候还需要给它的属性is_default进行赋值

代码如下:

当前我们可能是没有默认地址的,所以需要判别一下。而且这里的默认地址由于只有一个所以用list.get(0)~~~

三、新增地址

通过以前的经验,应该是前端传过来一个关于地址的DTO对象,最后我们封装成addressbook对象进行SQL的插入。看看接口文档是否如此:

这里由于前端传过来的和addressbook字段一致,所以直接用addressbook接收,controller代码如下:

这里的service层有两行代码,如下所示:

一个是设置默认字段以及用户id,为什么要这么做原因如下:

mapper层就是一个简单的插入SQL:

四、根据id查地址

这里的id是addressbook表的id,为什么需要这个接口呢,因为我们修改地址的时候需要显示当前地址的信息,如图所示:

所以其实本质就是,最初我们有一个list接口帮助查出所有地址,这个时候前端就拿到了所有地址的id,之后再去点击修改,它会把这个id重新发回后端,我们就能准确到底需要修改的地址并且展示出来以及修改。

代码就很简单了就是一个根据id查询:

五、根据id修改地址

先看接口文档:

本质就是前端传过来一些参数,封装到addressbook中,利用动态SQL进行update

六、设置为默认地址

其实本质是一个update功能,但是由于默认地址只能有一个,当我们设置一个新地址为默认地址之后就需要将其他地址设置为非默认地址。

涉及的操作

1.首先将所有地址设为非默认

2.设置该id的地址为默认

由于是两个更新操作,并且要保持事务一致性,别忘了加transactional

七、根据id删除地址

很简单不说了。。。

相关推荐
Java天梯之路17 小时前
Spring Boot 钩子全集实战(五):ApplicationContextInitializer详解
java·spring boot·后端
后端小张17 小时前
【AI 学习】AI提示词工程:从入门到实战的全栈指南
java·人工智能·深度学习·学习·语言模型·prompt·知识图谱
戴西软件17 小时前
戴西发布 DLM许可证加密防护软件V4.2让工业软件授权迈入并发调度与精细治理时代
运维·服务器·网络·数据库·人工智能·安全·云计算
NineData17 小时前
NineData云原生智能数据管理平台新功能发布|2025年12月版
数据库·云原生·数据库管理工具·ninedata·数据库迁移·数据库迁移工具·智能数据管理平台
Coder码匠17 小时前
Dockerfile 优化实践:从 400MB 到 80MB
java·spring boot
2501_941805931 天前
在大阪智能零售场景中构建支付实时处理与高并发顾客行为分析平台的工程设计实践经验分享
数据库
李慕婉学姐1 天前
【开题答辩过程】以《基于JAVA的校园即时配送系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·开发语言·数据库
珠海西格电力1 天前
零碳园区有哪些政策支持?
大数据·数据库·人工智能·物联网·能源
数据大魔方1 天前
【期货量化实战】日内动量策略:顺势而为的短线交易法(Python源码)
开发语言·数据库·python·mysql·算法·github·程序员创富