国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三)

這篇具有很好參考價值的文章主要介紹了基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.1 需求分析和設(shè)計

1.1.1 產(chǎn)品原型

地址簿,指的是消費者用戶的地址信息,用戶登錄成功后可以維護自己的地址信息。同一個用戶可以有多個地址信息,但是只能有一個默認地址
基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java

對于地址簿管理,有以下幾個功能:

  • 查詢地址列表
  • 新增地址
  • 修改地址
  • 刪除地址
  • 設(shè)置默認地址
  • 查詢默認地址

1.1.2 接口設(shè)計

根據(jù)上述原型圖先粗粒度設(shè)計接口,共包含7個接口。

接口設(shè)計:

  • 新增地址
  • 查詢登錄用戶所有地址
  • 查詢默認地址
  • 根據(jù)id修改地址
  • 根據(jù)id刪除地址
  • 根據(jù)id查詢地址
  • 設(shè)置默認地址

接下來細粒度分析每個接口,明確每個接口的請求方式、請求路徑、傳入?yún)?shù)和返回值。

1). 新增地址
基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java

2). 查詢登錄用戶所有地址

基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java

3). 查詢默認地址

基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java

4). 修改地址
基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java
5). 根據(jù)id刪除地址

基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java

6). 根據(jù)id查詢地址

基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java

7). 設(shè)置默認地址

基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣微信小程序端(十三),蒼穹外賣項目,spring boot,redis,微信小程序,后端,spring,java

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

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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣集成Redis(九)

    基于SpringBoot+Redis的前后端分離外賣項目-蒼穹外賣集成Redis(九)

    1.1 Redis的Java客戶端 Redis 的 Java 客戶端很多,常用的幾種: Jedis Lettuce Spring Data Redis Spring 對 Redis 客戶端進行了整合,提供了 Spring Data Redis,在Spring Boot項目中還提供了對應(yīng)的Starter,即 spring-boot-starter-data-redis。 1.2 Spring Data Redis使用方式 1.2.1 介紹 Spring Data Redis 是 Spring 的一部分

    2024年02月05日
    瀏覽(31)
  • 基于SpringBoot+WebSocket+Spring Task的前后端分離外賣項目-訂單管理(十七)

    基于SpringBoot+WebSocket+Spring Task的前后端分離外賣項目-訂單管理(十七)

    1.1 介紹 Spring Task 是Spring框架提供的任務(wù)調(diào)度工具,可以按照約定的時間自動執(zhí)行某個代碼邏輯。 定位 :定時任務(wù)框架 作用 :定時自動執(zhí)行某段Java代碼 應(yīng)用場景: 1). 信用卡每月還款提醒 2). 銀行貸款每月還款提醒 3). 火車票售票系統(tǒng)處理未支付訂單 4). 入職紀念日為用戶發(fā)

    2024年02月21日
    瀏覽(23)
  • 基于springboot+Redis的前后端分離項目(三)-【黑馬點評】

    基于springboot+Redis的前后端分離項目(三)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 每個店鋪都可以發(fā)布優(yōu)惠券: 當用戶搶購時,就會生成訂單并保存到tb_voucher_order這張表中,而訂單表如果使用數(shù)據(jù)庫自增ID就存在一些問題: id的規(guī)律性太明顯 受單表數(shù)據(jù)量的限制 場景分析

    2024年02月10日
    瀏覽(22)
  • 基于springboot+Redis的前后端分離項目(七)-【黑馬點評】

    基于springboot+Redis的前后端分離項目(七)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 發(fā)布探店筆記 探店筆記類似點評網(wǎng)站的評價,往往是圖文結(jié)合。對應(yīng)的表有兩個: tb_blog:探店筆記表,包含筆記中的標題、文字、圖片等 tb_blog_comments:其他用戶對探店筆記的評價 具體發(fā)布

    2024年02月13日
    瀏覽(39)
  • 基于springboot+Redis的前后端分離項目(一)-【黑馬點評】

    基于springboot+Redis的前后端分離項目(一)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 黑馬點評項目是前后端分離項目,前端部署在nginx服務(wù)器上,后端部署在tomcat上,具體將實現(xiàn)以下功能。 短信登錄 這一塊我們會使用redis共享session來實現(xiàn)。 商戶查詢緩存 通過學(xué)習(xí),我們會理

    2024年02月08日
    瀏覽(29)
  • 基于springboot+Redis的前后端分離項目(八)-【黑馬點評】

    基于springboot+Redis的前后端分離項目(八)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 針對用戶的操作:可以對用戶進行關(guān)注和取消關(guān)注功能。 實現(xiàn)思路: 需求:基于該表數(shù)據(jù)結(jié)構(gòu),實現(xiàn)兩個接口: 關(guān)注和取關(guān)接口 判斷是否關(guān)注的接口 關(guān)注是User之間的關(guān)系,是博主與粉絲的

    2024年02月16日
    瀏覽(27)
  • 基于springboot+Redis的前后端分離項目(二)-【黑馬點評】

    基于springboot+Redis的前后端分離項目(二)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 緩存( Cache),就是數(shù)據(jù)交換的 緩沖區(qū) ,俗稱的緩存就是 緩沖區(qū)內(nèi)的數(shù)據(jù) ,一般從數(shù)據(jù)庫中獲取,存儲于本地代碼。(例如: 由于其被 Static 修飾,所以隨著類的加載而被加載到 內(nèi)存之中 ,作為本地緩存

    2024年02月10日
    瀏覽(26)
  • 基于springboot+Redis的前后端分離項目(九)-【黑馬點評】

    基于springboot+Redis的前后端分離項目(九)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 GEO就是Geolocation的簡寫形式,代表地理坐標。Redis在3.2版本中加入了對GEO的支持,允許存儲地理坐標信息,幫助我們根據(jù)經(jīng)緯度來檢索數(shù)據(jù)。常見的命令有: GEOADD:添加一個地理空間信息,包含

    2024年02月16日
    瀏覽(28)
  • 基于springboot+Redis的前后端分離項目之消息隊列(六)-【黑馬點評】

    基于springboot+Redis的前后端分離項目之消息隊列(六)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 我們來回顧一下下單流程 當用戶發(fā)起請求,此時會請求nginx,nginx會訪問到tomcat,而tomcat中的程序,會進行串行操作,分成如下幾個步驟 1、查詢優(yōu)惠卷 2、判斷秒殺庫存是否足夠 3、查詢訂單

    2024年02月12日
    瀏覽(23)
  • 基于springboot+Redis的前后端分離項目之分布式鎖(四)-【黑馬點評】

    基于springboot+Redis的前后端分離項目之分布式鎖(四)-【黑馬點評】

    ????資源文件分享 鏈接:https://pan.baidu.com/s/1189u6u4icQYHg_9_7ovWmA?pwd=eh11 提取碼:eh11 分布式鎖:滿足分布式系統(tǒng)或集群模式下多進程可見并且互斥的鎖。 分布式鎖的核心思想就是讓大家都使用同一把鎖,只要大家使用的是同一把鎖,那么我們就能鎖住線程,不讓線程進行,讓

    2024年02月11日
    瀏覽(18)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包