范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

基于Springboot实现用户配送地址保存与默认收货地址修改功能

  1. 用户地址簿功能1.1 需求分析
  地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。
  同一个用户可以有多个地址信息,但是只能有一个默认地址。
  编辑
  编辑
  对于地址簿管理,我们需要实现以下几个功能:、
  新增地址 地址列表查询 设置默认地址 编辑地址 删除地址1.2 数据模型
  用户的地址信息会存储在address_book表,即地址簿表中。具体表结构如下:
  编辑
  这里面有一个字段is_default,实际上我们在设置默认地址时,只需要更新这个字段就可以了。2 功能代码1). 实体类 AddressBookpackage com.itheima.reggie.entity;  import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import lombok.Data; import java.io.Serializable; import java.time.LocalDateTime;  /**  * 地址簿  */ @Data public class AddressBook implements Serializable {      private static final long serialVersionUID = 1L;      private Long id;       //用户id     private Long userId;       //收货人     private String consignee;       //手机号     private String phone;       //性别 0 女 1 男     private String sex;       //省级区划编号     private String provinceCode;       //省级名称     private String provinceName;       //市级区划编号     private String cityCode;       //市级名称     private String cityName;       //区级区划编号     private String districtCode;       //区级名称     private String districtName;       //详细地址     private String detail;       //标签     private String label;      //是否默认 0 否 1是     private Integer isDefault;      //创建时间     @TableField(fill = FieldFill.INSERT)     private LocalDateTime createTime;       //更新时间     @TableField(fill = FieldFill.INSERT_UPDATE)     private LocalDateTime updateTime;       //创建人     @TableField(fill = FieldFill.INSERT)     private Long createUser;       //修改人     @TableField(fill = FieldFill.INSERT_UPDATE)     private Long updateUser;       //是否删除     private Integer isDeleted; } 复制代码2). Mapper接口 AddressBookMapperpackage com.itheima.reggie.mapper;  import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.itheima.reggie.entity.AddressBook; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;  import java.util.List;  @Mapper public interface AddressBookMapper extends BaseMapper {  } 复制代码3). 业务层接口 AddressBookServicepackage com.itheima.reggie.service;  import com.baomidou.mybatisplus.extension.service.IService; import com.itheima.reggie.entity.AddressBook;  public interface AddressBookService extends IService {  } 复制代码4). 业务层实现类 AddressBookServiceImplpackage com.itheima.reggie.service.impl;  import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.itheima.reggie.entity.AddressBook; import com.itheima.reggie.mapper.AddressBookMapper; import com.itheima.reggie.service.AddressBookService; import org.springframework.stereotype.Service;  @Service public class AddressBookServiceImpl extends ServiceImpl implements AddressBookService {  } 复制代码5). 控制层 AddressBookController1.逻辑:A. 新增地址逻辑说明:
  需要记录当前是哪个用户的地址(关联当前登录用户)
  B. 设置默认地址
  每个用户可以有很多地址,但是默认地址只能有一个 ; 先将该用户所有地址的is_default更新为0 , 然后将当前的设置的默认地址的is_default设置为1
  C. 根据ID查询地址
  D. 查询默认地址
  根据当前登录用户ID 以及 is_default进行查询,查询当前登录用户is_default为1的地址信息
  E. 查询指定用户的全部地址
  根据当前登录用户ID,查询所有的地址列表2 代码:package com.itheima.reggie.controller;  import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.itheima.reggie.common.BaseContext; import com.itheima.reggie.common.R; import com.itheima.reggie.entity.AddressBook; import com.itheima.reggie.service.AddressBookService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.CollectionUtils; import org.springframework.web.bind.annotation.*;  import java.util.List;  /**  * 地址簿管理  */ @Slf4j @RestController @RequestMapping("/addressBook") public class AddressBookController {      @Autowired     private AddressBookService addressBookService;      /**      * 新增      */     @PostMapping     public R save(@RequestBody AddressBook addressBook) {         addressBook.setUserId(BaseContext.getCurrentId());         log.info("addressBook:{}", addressBook);         addressBookService.save(addressBook);         return R.success(addressBook);     }      /**      * 设置默认地址      */     @PutMapping("default")     public R setDefault(@RequestBody AddressBook addressBook) {         log.info("addressBook:{}", addressBook);          LambdaUpdateWrapper wrapper = new LambdaUpdateWrapper<>();         wrapper.eq(AddressBook::getUserId, BaseContext.getCurrentId());         wrapper.set(AddressBook::getIsDefault, 0);         //SQL:update address_book set is_default = 0 where user_id = ?         addressBookService.update(wrapper);          addressBook.setIsDefault(1);         //SQL:update address_book set is_default = 1 where id = ?         addressBookService.updateById(addressBook);         return R.success(addressBook);     }      /**      * 根据id查询地址      */     @GetMapping("/{id}")     public R get(@PathVariable Long id) {         AddressBook addressBook = addressBookService.getById(id);         if (addressBook != null) {             return R.success(addressBook);         } else {             return R.error("没有找到该对象");         }     }      /**      * 查询默认地址      */     @GetMapping("default")     public R getDefault() {         LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();         queryWrapper.eq(AddressBook::getUserId, BaseContext.getCurrentId());         queryWrapper.eq(AddressBook::getIsDefault, 1);          //SQL:select * from address_book where user_id = ? and is_default = 1         AddressBook addressBook = addressBookService.getOne(queryWrapper);          if (null == addressBook) {             return R.error("没有找到该对象");         } else {             return R.success(addressBook);         }     }      /**      * 查询指定用户的全部地址      */     @GetMapping("/list")     public R list(AddressBook addressBook) {         addressBook.setUserId(BaseContext.getCurrentId());         log.info("addressBook:{}", addressBook);          //条件构造器         LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();         queryWrapper.eq(null != addressBook.getUserId(), AddressBook::getUserId, addressBook.getUserId());         queryWrapper.orderByDesc(AddressBook::getUpdateTime);          //SQL:select * from address_book where user_id = ? order by update_time desc         return R.success(addressBookService.list(queryWrapper));     } } 复制代码3 功能测试
  测试过程中,通过debug断点调试观察服务端程序的执行过程,在浏览器中使用调试工具查看页面和服务端的交互过程和请求响应数据。
  2). 列表查询
  当新增地址完成后,页面会再次发送一个请求,来查询该用户的所有地址列表,在界面进行展示。
  编辑 3). 设置默认
  在地址列表页面中,勾选 "设为默认地址" ,此时会发送PUT请求,来设置默认地址。

提升共享共享电单车骑行安全性,小安科技蓝牙智能头盔落地2022年,共享电单车行业经历了数年的发展,逐渐进入了平稳发展阶段。行业也逐渐走向规范化标准化。说到规范化标准化,共享电单车行业最被关注的点在于车辆的停放规范和骑行安全方面的保障。注意!智能电视正在侵蚀你的隐私自从互联网诞生以来,电脑病毒,流氓软件早就成为人们心中深恶痛绝的对象。偷取用户机密信息,弹出广告等几乎无恶不做。检测发现,80互联网手机上,电视上的APP存在安装软件包未加固的固体中国科研人员研发的黄土固化材料工程应用初见成效7月17日,345淤地坝航拍图。成都理工大学供图中新网成都7月18日电(记者贺劭清)记者18日从成都理工大学获悉,成都理工大学地灾防治国重实验室许强教授团队与新疆大学黄勇教授团队合大布刚踏入时尚圈半年就被炒鱿鱼,拿百万英镑代言费,却毛用没有英国高街品牌Superdry,因为经常使用毫无意义的汉字,给人们留下了深刻的印象。他们和贝克汉姆一家,也有着不解的渊源,15年前,贝克汉姆和妻子维多利亚造访尼斯时,身上穿了一件该品5位下嫁普通人的女明星!从海清到万茜,比起嫁豪门她们更幸福在娱乐圈中,女星嫁入豪门的例子多不胜数,但也有一些女星并不在意嫁入豪门,反而选择了普通人作为另一半,却依旧过得幸福甜蜜。今天就来聊聊这5位甘愿下嫁普通人的女星,看看谁的爱情故事更令成龙!那些充满怀念的老照片,他和每一位女明星的合照留念说实在,看到这张老照片时,差点没认出来这是成龙。一头十分有特色的时髦卷,就已经够亮眼了,还在自带迷之微笑。不过,看得出来成龙很是有绅士风度了。背上,手上全都提得满满的东西。不过,不吉吉哈迪德纽约街头溜娃露脐T恤牛仔短裤身材超好当地时间7月16日,吉吉哈迪德穿着露脐条纹T恤牛仔短裤推着坐着婴儿车里的1岁的女儿凯在纽约街头散步。吉吉哈迪德作为当红超模工作应该很忙,当时经常能拍到吉吉带着女儿出门逛街的照片,每给80年代最会演戏的女演员排个名潘虹第2刘晓庆第7陈冲垫底了80年代,我国影坛百花齐放姹紫嫣红。最令人瞩目的,是这一时期涌现出了一大批有天赋有演技,并且各有醒目代表作的年轻女明星。她们凭借靓丽的外形和精湛的演技,让我们记忆犹新。今天,雅清创TWICE多贤晒美照,秀出修长双腿,圆润肩线,完美消化露肩时尚韩国女星,女团Twice成员多贤晒出美照,完美消化露肩超迷你裙的时尚,秀出修长11字双腿,圆润肩线和白皙的肌肤,吸引了网友们的关注。7月16日,有韩国媒体以标题令人惊艳的TWICE今日欧美明星时尚街拍图集今日欧美明星时尚街拍图集(2022年7月17日)时尚欧美明星的街拍就是行走在马路上的秀场,明星们的街拍就是时尚界的潮流风向标。明星们身穿什么牌子的衣服肩背什么大牌包包,脚蹬什么潮流时尚防晒衣怎么搭配穿才好看图片时尚防晒衣怎么搭配穿才好看呢?穿好防晒衣就不用担心一不小心就晒黑。而且,现在的防晒衣也是越类越卷了,不仅穿得舒适凉爽还很有设计感。接下来就来学习9套时尚穿搭博主的时尚防晒衣穿搭示范
哈德森以一己之力拿下对手,对方多次火爆反压,都屡遭无力回天山东和青岛下半场打得非常火爆,后者将比分追平后出现了高涨的士气,张骋宇连砍6分,王汝恒也跟着飙中三分,而哈德森继续连飙两记穿云箭和对手叫板着,正当青岛反超比分时,李靖宇上来就飙中三跌!阿扎尔1800万贝尔500万登贝莱3000万库蒂尼奥1800万直播吧12月30日讯德转更新了最新身价,皇马和巴萨的几个话题性球员,身价都出现了大幅度下滑。阿扎尔从2500万欧元下降至1800万欧,身价最高时可达1。5亿欧贝尔从1000万欧下降广州队终现郑智接班人,泰山中场悍将缺点被放大,留洋大将要回来中超联赛接近尾声,虽然冠军已经产生了,但多场比赛依然给球迷带来了不少惊喜,特别是很多年轻球员都获得了表现的机会,国足的未来储备还是可观的。在争冠组方面,排名前两位的山东泰山和广州队中国最好喝的4款酒,100纯酿好喝不上头飞天茅台(酱香)rmb258953vol产地贵州茅台口感纯净爽口,略显醇甜推荐指数赖潭(酱香)rmb26853vol产地贵州茅台口感酱香浓郁,回味悠长比肩飞天茅台推荐指数梦之蓝M33换1!浓眉哥联手库里?这交易不要太烂湖人又输了,詹姆斯哪怕又砍下37分13板7助超豪华数据,也是无奈空砍。只能说对面的年轻人更猛,莫兰特41分10助大号两双,未来的超级巨星胚子!近7场比赛输了6场,唯一一场赢的是西部2021年跑圈年度复盘等待着,彷徨着,徘徊着2019年的此时,有人说希望它快点过去,因为是过去十年里最烂的一年,但旋即又会有人无比怀念,因为它是未来十年里最好的一年确实,在2019年12月底,一些人和事儿的出现,可能永远改写哈德森笑了,陶汉林笑了,山东玄冥二老合砍32分,刘毅贾诚立大功北京时间12月30日,CBA联赛第16轮上演齐鲁德比,最终山东高速男篮112105历经苦战拿下了青岛男篮。哈德森砍下38分7个篮板7次助攻依旧是表现最好的球员,除此之外两位老将王汝有一种心酸叫郑恺拿全勤奖,却被孤立,他为何不愿退出跑男?跑男自开播来就人气鼎盛,前三季更是。而其巅峰时期,几位固定嘉宾的红利更是数不胜数,无论是代言还是戏都接到手软。不过随着时间的推移,任何综艺都避免不了走下坡路,强如芒果台的王牌综艺快林志颖晒与亲弟表演合照!嘴边一圈胡茬没刮,兄弟长相对比强烈近日,林志颖晒出了和弟弟林志鑫一起参加年会表演的照片。照片中弟弟林志鑫穿着一身黑色西装,内搭红色毛衫和白色衬衣,林志颖穿着黑色夹克和黑色休闲裤。从外表来看兄弟两面容差距有些大,弟弟蚂蚁金服上市重启,相互宝关停是为其让路?12月28日,相互宝突然宣布将于1月28日正式关停。有报道称为了关停相互宝,蚂蚁金服将支出高达30亿的关停成本。因目前的相互宝用户还有7500万人,从公告之日起到关停将还会有3期的内卷严重,物极必反!互联网时代红利真的过去了吗?在这疫情影响的两年里,我们有没有发现生活中一些规律,就是QQ已经成为摆设,QQ群变成了骗子的聚集地,各种刷单交会费,邀请宝妈参加等等。而微信朋友圈大多数都是广告,年底各种卖东西的,