地址簿相关功能
1.1 需求分析和设计
1.1.1 产品原型
地址簿,指的是消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。同一个用户可以有多个地址信息,但是只能有一个默认地址。
对于地址簿管理,有以下几个功能:
- 查询地址列表
- 新增地址
- 修改地址
- 删除地址
- 设置默认地址
- 查询默认地址
1.1.2 接口设计
根据上述原型图先粗粒度设计接口,共包含7个接口。
接口设计:
- 新增地址
- 查询登录用户所有地址
- 查询默认地址
- 根据id修改地址
- 根据id删除地址
- 根据id查询地址
- 设置默认地址
接下来细粒度分析每个接口,明确每个接口的请求方式、请求路径、传入参数和返回值。
1). 新增地址
2). 查询登录用户所有地址
3). 查询默认地址
4). 修改地址
5). 根据id删除地址
6). 根据id查询地址
7). 设置默认地址
1.1.3 表设计
用户的地址信息会存储在address_book表,即地址簿表中。具体表结构如下:
字段名数据类型说明****备注idbigint主键自增user_idbigint用户id逻辑外键consigneevarchar(50)收货人sexvarchar(2)性别phonevarchar(11)手机号province_codevarchar(12)省份编码province_namevarchar(32)省份名称city_codevarchar(12)城市编码city_namevarchar(32)城市名称district_codevarchar(12)区县编码district_namevarchar(32)区县名称detailvarchar(200)详细地址信息具体到门牌号labelvarchar(100)标签公司、家、学校is_defaulttinyint(1)是否默认地址1是 0否
这里面有一个字段is_default,实际上我们在设置默认地址时,只需要更新这个字段就可以了。
1.2 代码实现
1.2.1 Mapper层
创建AddressBookMapper.java
packagecom.sky.mapper;importcom.sky.entity.AddressBook;importorg.apache.ibatis.annotations.*;importjava.util.List;@MapperpublicinterfaceAddressBookMapper{/**
* 条件查询
* @param addressBook
* @return
*/List<AddressBook>list(AddressBook addressBook);/**
* 新增
* @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})")voidinsert(AddressBook addressBook);/**
* 根据id查询
* @param id
* @return
*/@Select("select * from address_book where id = #{id}")AddressBookgetById(Long id);/**
* 根据id修改
* @param addressBook
*/voidupdate(AddressBook addressBook);/**
* 根据 用户id修改 是否默认地址
* @param addressBook
*/@Update("update address_book set is_default = #{isDefault} where user_id = #{userId}")voidupdateIsDefaultByUserId(AddressBook addressBook);/**
* 根据id删除地址
* @param id
*/@Delete("delete from address_book where id = #{id}")voiddeleteById(Long id);}
创建AddressBookMapper.xml
<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPEmapperPUBLIC"-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"><mappernamespace="com.sky.mapper.AddressBookMapper"><selectid="list"parameterType="AddressBook"resultType="AddressBook">
select * from address_book
<where><iftest="userId != null">
and user_id = #{userId}
</if><iftest="phone != null">
and phone = #{phone}
</if><iftest="isDefault != null">
and is_default = #{isDefault}
</if></where></select><updateid="update"parameterType="addressBook">
update address_book
<set><iftest="consignee != null">
consignee = #{consignee},
</if><iftest="sex != null">
sex = #{sex},
</if><iftest="phone != null">
phone = #{phone},
</if><iftest="detail != null">
detail = #{detail},
</if><iftest="label != null">
label = #{label},
</if><iftest="isDefault != null">
is_default = #{isDefault},
</if></set>
where id = #{id}
</update></mapper>
1.2.2 Service层
创建AddressBookService.java
packagecom.sky.service;importcom.sky.entity.AddressBook;importjava.util.List;publicinterfaceAddressBookService{List<AddressBook>list(AddressBook addressBook);voidsave(AddressBook addressBook);AddressBookgetById(Long id);voidupdate(AddressBook addressBook);voidsetDefault(AddressBook addressBook);voiddeleteById(Long id);}
创建AddressBookServiceImpl.java
packagecom.sky.service.impl;@Service@Slf4jpublicclassAddressBookServiceImplimplementsAddressBookService{@AutowiredprivateAddressBookMapper addressBookMapper;/**
* 条件查询
*
* @param addressBook
* @return
*/publicList<AddressBook>list(AddressBook addressBook){return addressBookMapper.list(addressBook);}/**
* 新增地址
*
* @param addressBook
*/publicvoidsave(AddressBook addressBook){
addressBook.setUserId(BaseContext.getCurrentId());
addressBook.setIsDefault(0);
addressBookMapper.insert(addressBook);}/**
* 根据id查询
*
* @param id
* @return
*/publicAddressBookgetById(Long id){AddressBook addressBook = addressBookMapper.getById(id);return addressBook;}/**
* 根据id修改地址
*
* @param addressBook
*/publicvoidupdate(AddressBook addressBook){
addressBookMapper.update(addressBook);}/**
* 设置默认地址
*
* @param addressBook
*/@TransactionalpublicvoidsetDefault(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);}/**
* 根据id删除地址
*
* @param id
*/publicvoiddeleteById(Long id){
addressBookMapper.deleteById(id);}}
1.2.3 Controller层
packagecom.sky.controller.user;@RestController@RequestMapping("/user/addressBook")@Api(tags ="C端地址簿接口")publicclassAddressBookController{@AutowiredprivateAddressBookService addressBookService;/**
* 查询当前登录用户的所有地址信息
*
* @return
*/@GetMapping("/list")@ApiOperation("查询当前登录用户的所有地址信息")publicResult<List<AddressBook>>list(){AddressBook addressBook =newAddressBook();
addressBook.setUserId(BaseContext.getCurrentId());List<AddressBook> list = addressBookService.list(addressBook);returnResult.success(list);}/**
* 新增地址
*
* @param addressBook
* @return
*/@PostMapping@ApiOperation("新增地址")publicResultsave(@RequestBodyAddressBook addressBook){
addressBookService.save(addressBook);returnResult.success();}@GetMapping("/{id}")@ApiOperation("根据id查询地址")publicResult<AddressBook>getById(@PathVariableLong id){AddressBook addressBook = addressBookService.getById(id);returnResult.success(addressBook);}/**
* 根据id修改地址
*
* @param addressBook
* @return
*/@PutMapping@ApiOperation("根据id修改地址")publicResultupdate(@RequestBodyAddressBook addressBook){
addressBookService.update(addressBook);returnResult.success();}/**
* 设置默认地址
*
* @param addressBook
* @return
*/@PutMapping("/default")@ApiOperation("设置默认地址")publicResultsetDefault(@RequestBodyAddressBook addressBook){
addressBookService.setDefault(addressBook);returnResult.success();}/**
* 根据id删除地址
*
* @param id
* @return
*/@DeleteMapping@ApiOperation("根据id删除地址")publicResultdeleteById(Long id){
addressBookService.deleteById(id);returnResult.success();}/**
* 查询默认地址
*/@GetMapping("default")@ApiOperation("查询默认地址")publicResult<AddressBook>getDefault(){//SQL:select * from address_book where user_id = ? and is_default = 1AddressBook addressBook =newAddressBook();
addressBook.setIsDefault(1);
addressBook.setUserId(BaseContext.getCurrentId());List<AddressBook> list = addressBookService.list(addressBook);if(list !=null&& list.size()==1){returnResult.success(list.get(0));}returnResult.error("没有查询到默认地址");}}
后记
👉👉💕💕美好的一天,到此结束,下次继续努力!欲知后续,请看下回分解,写作不易,感谢大家的支持!! 🌹🌹🌹
版权归原作者 失重外太空. 所有, 如有侵权,请联系我们删除。