苍穹外卖day8(1)地址簿功能

ops/2024/9/23 14:35:08/

文章目录

  • 前言
  • 一、产品原型
  • 二、数据库设计
  • 三、接口设计、代码实现
    • 1. 新增地址
    • 2. 查询登录用户所有地址
    • 3. 查询默认地址
    • 4. 修改地址
    • 5. 根据id删除地址
    • 6. 根据id查询地址
    • 7. 设置默认地址


前言

这部分主要是对用户端中地址簿的一些增删改查操作,业务逻辑比较简单,但是要注意一些细节,比如设置默认地址的时候,可以先把所以地址设置为非默认地址,再设置其中一个为默认地址(修改)。

一、产品原型

查询地址列表
新增地址
修改地址
删除地址
设置默认地址
查询默认地址
在这里插入图片描述

二、数据库设计

在这里插入图片描述

三、接口设计、代码实现

1. 新增地址

在这里插入图片描述
1、在AdressBookController中编写add方法新增地址

java"> @PostMapping@ApiOperation("新增地址")public Result add(@RequestBody AddressBook addressBook){addressBookService.addAddressBook(addressBook);return Result.success();}

2、在AdressBookService中定义addAddressBook方法,在AdressBookServiceImpl中实现方法

java">public void addAddressBook(AddressBook addressBook) {addressBook.setUserId(BaseContext.getCurrentId());addressBook.setIsDefault(0); addressBookMapper.addAddressBook(addressBook);
}

3、在addAddressMapper中定义addAddressBook方法,在addAddressMapper.xml文件中编写sql语句,实现新增地址

 <insert id="addAddressBook" useGeneratedKeys="true" keyProperty="id">insert into sky_take_out.address_book (user_id, consignee, sex, phone, province_code, province_name, city_code,city_name, district_code, district_name, detail, label,is_default)values(#{userId}, #{consignee}, #{sex}, #{phone}, #{provinceCode}, #{provinceName}, #{cityCode}, #{cityName}, #{districtCode},#{districtName}, #{detail}, #{label}, #{isDefault})</insert>

2. 查询登录用户所有地址

在这里插入图片描述
1、在AdressBookController中编写list方法查询地址

java"> @GetMapping("/list")@ApiOperation("查询登录用户所有地址")public Result<List<AddressBook>> list(){AddressBook addressBook = new AddressBook();addressBook.setUserId(BaseContext.getCurrentId());List<AddressBook> addressBooks = addressBookService.list(addressBook);return Result.success(addressBooks);}

2、在AdressBookService中定义addAddressBook方法,在AdressBookServiceImpl中实现方法

java">public List<AddressBook> list(AddressBook addressBook) { return addressBookMapper.list(addressBook);
}

3、在addAddressMapper中定义list方法根据条件查询地址,在addAddressMapper.xml文件中编写sql语句

 <select id="list" parameterType="AddressBook" resultType="AddressBook">select * from sky_take_out.address_book<where><if test="userId != null">and user_id = #{userId}</if><if test="phone != null">and phone = #{phone}</if><if test="isDefault != null">and is_default = #{isDefault}</if></where>
</select>

3. 查询默认地址

在这里插入图片描述
1、在AdressBookController中编写getDefault方法查询地址

java">@GetMapping("default")
@ApiOperation("查询默认地址")
public Result<AddressBook> getDefault() {//SQL:select * from address_book where user_id = ? and is_default = 1AddressBook addressBook = new AddressBook();addressBook.setIsDefault(1);addressBook.setUserId(BaseContext.getCurrentId());List<AddressBook> list = addressBookService.list(addressBook);if (list != null && list.size() == 1) {return Result.success(list.get(0));  //默认地址只会有一个}return Result.error("没有查询到默认地址");
}

2、list方法在第2部分查询登录用户所有地址已实现

4. 修改地址

在这里插入图片描述
1、在AdressBookController中编写update方法根据id修改地址

java">@PutMapping
@ApiOperation("根据id修改地址")
public Result update(@RequestBody AddressBook addressBook){addressBookService.update(addressBook);return Result.success();
}

2、在AdressBookService中定义update方法,在AdressBookServiceImpl中实现方法

java">public void update(AddressBook addressBook) {   addressBookMapper.update(addressBook);
}

3、在addAddressMapper中定义update方法根据id修改地址,在addAddressMapper.xml文件中编写sql语句

 <update id="update">update sky_take_out.address_book<set><if test="consignee != null">consignee = #{consignee},</if><if test="sex != null">sex = #{sex},</if><if test="phone != null">phone = #{phone},</if><if test="detail != null">detail = #{detail},</if><if test="label != null">label = #{label},</if><if test="isDefault != null">is_default = #{isDefault},</if></set>where id = #{id}</update>

5. 根据id删除地址

在这里插入图片描述
1、在AdressBookController中编写deleteById方法根据id删除地址

java">@DeleteMapping
@ApiOperation("根据id删除地址")
public Result deleteById(Long id){addressBookService.delete(id);return Result.success();
}

2、在AdressBookService中定义delete方法,在AdressBookServiceImpl中实现方法

java">public void delete(Long id) {addressBookMapper.delete(id);
}

3、在addAddressMapper中定义delete方法根据id删除地址

java">@Delete("delete from sky_take_out.address_book where id=#{id}")
void delete(Long id);

6. 根据id查询地址

在这里插入图片描述
1、在AdressBookController中编写getById方法根据id查询地址

java">@GetMapping("/{id}")
@ApiOperation("根据id查询地址")
public Result<AddressBook> getById(@PathVariable Long id){AddressBook addressBook = addressBookService.getById(id);return Result.success(addressBook);
}

2、在AdressBookService中定义getById方法,在AdressBookServiceImpl中实现方法

java">public AddressBook getById(Long id) {AddressBook addressBook = addressBookMapper.getById(id);return addressBook;
}

3、在addAddressMapper中定义delete方法根据id查询地址

java">@Select("select * from sky_take_out.address_book where id=#{id}")
AddressBook getById(Long id);

7. 设置默认地址

在这里插入图片描述
1、在AdressBookController中编写setDefault方法设置默认地址

java">@PutMapping("/default")
@ApiOperation("设置默认地址")
public Result setDefault(@RequestBody AddressBook addressBook){addressBookService.setDefault(addressBook);return Result.success();
}

2、在AdressBookService中定义getById方法,在AdressBookServiceImpl中实现方法

java">@Transactional
public void setDefault(AddressBook addressBook) {//1、将当前用户的所有地址修改为非默认地址 update address_book set is_default = ? where user_id = ?addressBook.setIsDefault(0);addressBook.setUserId(BaseContext.getCurrentId());addressBookMapper.updateIsDefaultByUserId(addressBook);//2、将当前地址改为默认地址 update address_book set is_default = ? where id = ?addressBook.setIsDefault(1);addressBookMapper.update(addressBook);
}

3、在addAddressMapper中定义updateIsDefaultByUserId方法将当前用户的所有地址修改为非默认地址,然后定义update方法将当前地址改为默认地址(修改地址已实现)

java">@Update("update sky_take_out.address_book set is_default = #{isDefault} where user_id = #{userId}")
void updateIsDefaultByUserId(AddressBook addressBook);


http://www.ppmy.cn/ops/23537.html

相关文章

TCP和UDP

文章目录 TCP和UDP的比较TCP&#xff08;传输控制协议&#xff09;UDP&#xff08;用户数据报协议&#xff09;总结 TCP和UDP的比较 TCPUDP是否连接面向连接无连接是否可靠可靠传输&#xff0c;使用流量控制和拥塞控制不可靠传输&#xff0c;不使用流量控制和拥塞控制连接对象…

七彩虹(Colorful)隐星P16 2023款笔记本电脑原装出厂Win11系统镜像下载 带建Recovery一键还原功能

七彩虹原厂Windows预装OEM专用系统&#xff0c;恢复出厂开箱状态一模一样 适用型号&#xff1a;隐星P16 23 链接&#xff1a;https://pan.baidu.com/s/1Ig5MQMiC8k4VSuCOZRQHUw?pwdak5l 提取码&#xff1a;ak5l 原厂W11系统自带所有驱动、出厂时自带的主题与专用壁纸、系…

MySQL8.0新特性

1、新增降序索引 MySQL 5.7&#xff1a;在语法上支持降序索引&#xff0c;但实际上创建的仍然是升序索引 MySQL 8.0&#xff1a;真正支持降序索引&#xff08;只有Innodb存储引擎支持降序索引&#xff09; # MySQL 5.7演示 mysql> create table t1(c1 int,c2 int,index i…

Pinia在Vue 3项目中的应用

Pinia是一个用于Vue 3的状态管理库。它旨在提供一个简单而强大的解决方案&#xff0c;用于在Vue 3项目中管理应用程序的状态。下面是Pinia在Vue 3项目中的一些常见应用示例&#xff1a; 创建和管理全局状态&#xff1a;Pinia允许您在应用程序中创建和管理全局状态。您可以使用P…

【leetcode】数组和相关题目总结

1. 两数之和 直接利用hashmap存储值和对于索引&#xff0c;利用target-nums[i]去哈希表里找对应数值。返回下标。 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map<int, int> mp;vector<int> res;fo…

的记忆:pandas(实在会忘记,就看作是一个 Excel 表格,或者是 SQL 表,或者是字典的字典。)

pandas 是一个开源的 Python 数据分析库&#xff0c;它提供了快速、灵活和富有表现力的数据结构&#xff0c;旨在使“关系”或“标记”数据的“快速分析、清洗和转换”变得既简单又直观。pandas 非常适合于数据清洗和转换、数据分析和建模等任务。以下是 pandas 的基本概念和主…

【Redis 开发】一人一单,超卖问题(悲观锁,乐观锁,分布式锁)

锁 悲观锁乐观锁第一种&#xff1a;版本号法第二种&#xff1a;CAS法实现乐观锁 悲观锁与乐观锁的比较 一人一单分布式锁Redis实现分布式锁 悲观锁 认为线程问题一定会发生&#xff0c;因此在操作数据库之前先获取锁&#xff0c;确保线程串行执行&#xff0c;例如Synchronized…

【数据可视化】教程案例相关项目,要点和难点,案例代码,代码解析

当涉及数据可视化时,有许多不同的工具、技术和方法可供选择。下面是一个简要的指南,其中包括教程、案例、相关项目,以及关于要点和难点的信息。 教程 Python的Matplotlib和Seaborn库:这两个库是Python中最流行的数据可视化工具之一。你可以通过官方文档或者在线教程学习如…