1.1 需求分析和設(shè)計
1.1.1 產(chǎn)品原型
地址簿,指的是消費者用戶的地址信息,用戶登錄成功后可以維護自己的地址信息。同一個用戶可以有多個地址信息,但是只能有一個默認地址。
對于地址簿管理,有以下幾個功能:
- 查詢地址列表
- 新增地址
- 修改地址
- 刪除地址
- 設(shè)置默認地址
- 查詢默認地址
1.1.2 接口設(shè)計
根據(jù)上述原型圖先粗粒度設(shè)計接口,共包含7個接口。
接口設(shè)計:
- 新增地址
- 查詢登錄用戶所有地址
- 查詢默認地址
- 根據(jù)id修改地址
- 根據(jù)id刪除地址
- 根據(jù)id查詢地址
- 設(shè)置默認地址
接下來細粒度分析每個接口,明確每個接口的請求方式、請求路徑、傳入?yún)?shù)和返回值。
1). 新增地址
2). 查詢登錄用戶所有地址
3). 查詢默認地址
4). 修改地址
5). 根據(jù)id刪除地址
6). 根據(jù)id查詢地址
7). 設(shè)置默認地址
1.1.3 表設(shè)計
用戶的地址信息會存儲在address_book表,即地址簿表中。具體表結(jié)構(gòu)如下:
字段名 | 數(shù)據(jù)類型 | 說明 | 備注 |
---|---|---|---|
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) | 區(qū)縣編碼 | |
district_name | varchar(32) | 區(qū)縣名稱 | |
detail | varchar(200) | 詳細地址信息 | 具體到門牌號 |
label | varchar(100) | 標簽 | 公司、家、學(xué)校 |
is_default | tinyint(1) | 是否默認地址 | 1是 0否 |
這里面有一個字段is_default,實際上我們在設(shè)置默認地址時,只需要更新這個字段就可以了。
1.2 代碼實現(xiàn)
1.2.1 Mapper層
創(chuàng)建AddressBookMapper.java
package com.sky.mapper;
import com.sky.entity.AddressBook;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface AddressBookMapper {
/**
* 條件查詢
* @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})")
void insert(AddressBook addressBook);
/**
* 根據(jù)id查詢
* @param id
* @return
*/
@Select("select * from address_book where id = #{id}")
AddressBook getById(Long id);
/**
* 根據(jù)id修改
* @param addressBook
*/
void update(AddressBook addressBook);
/**
* 根據(jù) 用戶id修改 是否默認地址
* @param addressBook
*/
@Update("update address_book set is_default = #{isDefault} where user_id = #{userId}")
void updateIsDefaultByUserId(AddressBook addressBook);
/**
* 根據(jù)id刪除地址
* @param id
*/
@Delete("delete from address_book where id = #{id}")
void deleteById(Long id);
}
創(chuàng)建AddressBookMapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.sky.mapper.AddressBookMapper">
<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>
<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>
</mapper>
1.2.2 Service層
創(chuàng)建AddressBookService.java
package com.sky.service;
import com.sky.entity.AddressBook;
import java.util.List;
public interface AddressBookService {
List<AddressBook> list(AddressBook addressBook);
void save(AddressBook addressBook);
AddressBook getById(Long id);
void update(AddressBook addressBook);
void setDefault(AddressBook addressBook);
void deleteById(Long id);
}
創(chuàng)建AddressBookServiceImpl.java文章來源:http://www.zghlxwxcb.cn/news/detail-812481.html
package com.sky.service.impl;
@Service
@Slf4j
public class AddressBookServiceImpl implements AddressBookService {
@Autowired
private AddressBookMapper addressBookMapper;
/**
* 條件查詢
*
* @param addressBook
* @return
*/
public List<AddressBook> list(AddressBook addressBook) {
return addressBookMapper.list(addressBook);
}
/**
* 新增地址
*
* @param addressBook
*/
public void save(AddressBook addressBook) {
addressBook.setUserId(BaseContext.getCurrentId());
addressBook.setIsDefault(0);
addressBookMapper.insert(addressBook);
}
/**
* 根據(jù)id查詢
*
* @param id
* @return
*/
public AddressBook getById(Long id) {
AddressBook addressBook = addressBookMapper.getById(id);
return addressBook;
}
/**
* 根據(jù)id修改地址
*
* @param addressBook
*/
public void update(AddressBook addressBook) {
addressBookMapper.update(addressBook);
}
/**
* 設(shè)置默認地址
*
* @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);
}
/**
* 根據(jù)id刪除地址
*
* @param id
*/
public void deleteById(Long id) {
addressBookMapper.deleteById(id);
}
}
1.2.3 Controller層
package com.sky.controller.user;
@RestController
@RequestMapping("/user/addressBook")
@Api(tags = "C端地址簿接口")
public class AddressBookController {
@Autowired
private AddressBookService addressBookService;
/**
* 查詢當前登錄用戶的所有地址信息
*
* @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);
}
/**
* 新增地址
*
* @param addressBook
* @return
*/
@PostMapping
@ApiOperation("新增地址")
public Result save(@RequestBody AddressBook addressBook) {
addressBookService.save(addressBook);
return Result.success();
}
@GetMapping("/{id}")
@ApiOperation("根據(jù)id查詢地址")
public Result<AddressBook> getById(@PathVariable Long id) {
AddressBook addressBook = addressBookService.getById(id);
return Result.success(addressBook);
}
/**
* 根據(jù)id修改地址
*
* @param addressBook
* @return
*/
@PutMapping
@ApiOperation("根據(jù)id修改地址")
public Result update(@RequestBody AddressBook addressBook) {
addressBookService.update(addressBook);
return Result.success();
}
/**
* 設(shè)置默認地址
*
* @param addressBook
* @return
*/
@PutMapping("/default")
@ApiOperation("設(shè)置默認地址")
public Result setDefault(@RequestBody AddressBook addressBook) {
addressBookService.setDefault(addressBook);
return Result.success();
}
/**
* 根據(jù)id刪除地址
*
* @param id
* @return
*/
@DeleteMapping
@ApiOperation("根據(jù)id刪除地址")
public Result deleteById(Long id) {
addressBookService.deleteById(id);
return Result.success();
}
/**
* 查詢默認地址
*/
@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("沒有查詢到默認地址");
}
}
后記
????????美好的一天,到此結(jié)束,下次繼續(xù)努力!欲知后續(xù),請看下回分解,寫作不易,感謝大家的支持??! ??????文章來源地址http://www.zghlxwxcb.cn/news/detail-812481.html
到了這里,關(guān)于基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!