地址簿功能代码
需求分析和设计
产品原型:

业务功能:
• 查询地址列表• 新增地址• 修改地址• 删除地址• 设置默认地址• 查询默认地址
接口设计:

用户的地址信息会存储在 address_book 表,即地址簿表中。具体表结构如下:
| 字段名 | 数据类型 | 说明 | 备注 |
| id | bigint | 主键 | 自增 |
| user_id | bigint | 用户id | 逻辑外键 |
| consignee | varchar(50) | 收货人 | |
| sex | varchar(2) | 性别 | |
| phone | varchar(11) | 手机号 | |
| province_code | varchar(12) | 省份编码 | |
| province_name | varchar(32) | 省份名称 | |
| city_code | varchar(12) | 城市编码 | |
| city_name | varchar(32) | 城市名称 | |
| district_code | varchar(12) | 区县编码 | |
| district_name | varchar(32) | 区县名称 | |
| detail | varchar(200) | 详细地址信息 | 具体到门牌号 |
| label | varchar(100) | 标签 | 公司、家、学校 |
| is_default | tinyint(1) | 是否默认地址 | 1是 0否 |
接口设计:新增地址
代码
AddressBookController
package com.sky.controller.user; import com.sky.context.BaseContext; import com.sky.entity.AddressBook; import com.sky.result.Result; import com.sky.service.AddressBookService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/user/addressBook") @Api(tags = "C端地址簿接口") public class AddressBookController { /** * 新增地址 * * @param addressBook * @return */ @PostMapping @ApiOperation("新增地址") public Result save(@RequestBody AddressBook addressBook) { addressBookService.save(addressBook); return Result.success(); } }AddressBookService
/** * 新增 * @param addressBook */ void save(AddressBook addressBook);AddressBookServiceImpl
/** * 新增地址 * * @param addressBook */ public void save(AddressBook addressBook) { addressBook.setUserId(BaseContext.getCurrentId()); addressBook.setIsDefault(0); addressBookMapper.insert(addressBook); }AddressBookMapper
/** * 新增 * @param addressBook */ @Insert("insert into address_book" + " (user_id, consignee, phone, sex, province_code, province_name, city_code, city_name, district_code," + " district_name, detail, label, is_default)" + " values (#{userId}, #{consignee}, #{phone}, #{sex}, #{provinceCode}, #{provinceName}, #{cityCode}, #{cityName}," + " #{districtCode}, #{districtName}, #{detail}, #{label}, #{isDefault})") void insert(AddressBook addressBook);
接口设计:查询登录用户所有地址

代码
AddressBookController
/** * 查询当前登录用户的所有地址信息 * * @return */ @GetMapping("/list") @ApiOperation("查询当前登录用户的所有地址信息") public Result<List<AddressBook>> list() { AddressBook addressBook = new AddressBook(); addressBook.setUserId(BaseContext.getCurrentId()); List<AddressBook> list = addressBookService.list(addressBook); return Result.success(list); }AddressBookService
List<AddressBook> list(AddressBook addressBook);AddressBookServiceImpl
/** * 条件查询 * * @param addressBook * @return */ public List<AddressBook> list(AddressBook addressBook) { return addressBookMapper.list(addressBook); }AddressBookMapper
/** * 条件查询所有地址 * @param addressBook * @return */ List<AddressBook> list(AddressBook addressBook);AddressBookMapper.xml
<select id="list" parameterType="AddressBook" resultType="AddressBook"> select * from 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>
接口设计:查询默认地址

代码
AddressBookController
/** * 查询默认地址 */ @GetMapping("default") @ApiOperation("查询默认地址") public Result<AddressBook> getDefault() { //SQL:select * from address_book where user_id = ? and is_default = 1 AddressBook 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("没有查询到默认地址"); }
接口设计:修改地址

代码
AddressBookController
/** * 根据id修改地址 * * @param addressBook * @return */ @PutMapping @ApiOperation("根据id修改地址") public Result update(@RequestBody AddressBook addressBook) { addressBookService.update(addressBook); return Result.success(); }AddressBookService
/** * 修改地址 * @param addressBook */ void update(AddressBook addressBook);AddressBookServiceImpl
/** * 根据id修改地址 * * @param addressBook */ public void update(AddressBook addressBook) { addressBookMapper.update(addressBook); }AddressBookMapper
/** * 根据id修改 * @param addressBook */ void update(AddressBook addressBook);AddressBookMapper.xml
<update id="update" parameterType="addressBook"> update 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>
接口设计:根据id删除地址

代码
AddressBookController
/** * 根据id删除地址 * * @param id * @return */ @DeleteMapping @ApiOperation("根据id删除地址") public Result deleteById(Long id) { addressBookService.deleteById(id); return Result.success(); }AddressBookService
/** * 根据id删除地址 * @param id */ void deleteById(Long id);AddressBookServiceImpl
/** * 根据id删除地址 * * @param id */ public void deleteById(Long id) { addressBookMapper.deleteById(id); }AddressBookMapper
/** * 根据id删除地址 * @param id */ @Delete("delete from address_book where id = #{id}") void deleteById(Long id);
接口设计:根据id查询地址

代码
AddressBookController
/** * 根据id查询地址 * @param id * @return */ @GetMapping("/{id}") @ApiOperation("根据id查询地址") public Result<AddressBook> getById(@PathVariable Long id) { AddressBook addressBook = addressBookService.getById(id); return Result.success(addressBook); }AddressBookService
/** * 根据id查询地址 * @param id * @return */ AddressBook getById(Long id);AddressBookServiceImpl
/** * 根据id查询 * * @param id * @return */ public AddressBook getById(Long id) { AddressBook addressBook = addressBookMapper.getById(id); return addressBook; }AddressBookMapper
/** * 根据id查询 * @param id * @return */ @Select("select * from address_book where id = #{id}") AddressBook getById(Long id);
接口设计:设置默认地址

代码
AddressBookController
/** * 设置默认地址 * * @param addressBook * @return */ @PutMapping("/default") @ApiOperation("设置默认地址") public Result setDefault(@RequestBody AddressBook addressBook) { addressBookService.setDefault(addressBook); return Result.success(); }AddressBookService
/** * 设置默认地址 * @param addressBook */ void setDefault(AddressBook addressBook);AddressBookServiceImpl
/** * 设置默认地址 * * @param addressBook */ @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); }AddressBookMapper
/** * 根据id修改 * @param addressBook */ void update(AddressBook addressBook); /** * 根据 用户id修改 是否默认地址 * @param addressBook */ @Update("update address_book set is_default = #{isDefault} where user_id = #{userId}") void updateIsDefaultByUserId(AddressBook addressBook);
2552

被折叠的 条评论
为什么被折叠?



