1。用户地址簿功能1。1需求分析 地址簿,指的是移动端消费者用户的地址信息,用户登录成功后可以维护自己的地址信息。 同一个用户可以有多个地址信息,但是只能有一个默认地址。 编辑 编辑 对于地址簿管理,我们需要实现以下几个功能:、 新增地址地址列表查询设置默认地址编辑地址删除地址1。2数据模型 用户的地址信息会存储在addressbook表,即地址簿表中。具体表结构如下: 编辑 这里面有一个字段isdefault,实际上我们在设置默认地址时,只需要更新这个字段就可以了。2功能代码1)。实体类AddressBookpackagecom。itheima。reggie。entity;importcom。baomidou。mybatisplus。annotation。FieldFill;importcom。baomidou。mybatisplus。annotation。TableField;importlombok。Data;importjava。io。Serializable;importjava。time。LocalDateTime;地址簿DatapublicclassAddressBookimplementsSerializable{privatestaticfinallongserialVersionUID1L;privateLongid;用户idprivateLonguserId;收货人privateStringconsignee;手机号privateStringphone;性别0女1男privateStringsex;省级区划编号privateStringprovinceCode;省级名称privateStringprovinceName;市级区划编号privateStringcityCode;市级名称privateStringcityName;区级区划编号privateStringdistrictCode;区级名称privateStringdistrictName;详细地址privateStringdetail;标签privateStringlabel;是否默认0否1是privateIntegerisDefault;创建时间TableField(fillFieldFill。INSERT)privateLocalDateTimecreateTime;更新时间TableField(fillFieldFill。INSERTUPDATE)privateLocalDateTimeupdateTime;创建人TableField(fillFieldFill。INSERT)privateLongcreateUser;修改人TableField(fillFieldFill。INSERTUPDATE)privateLongupdateUser;是否删除privateIntegerisDeleted;}复制代码2)。Mapper接口AddressBookMapperpackagecom。itheima。reggie。mapper;importcom。baomidou。mybatisplus。core。mapper。BaseMapper;importcom。itheima。reggie。entity。AddressBook;importorg。apache。ibatis。annotations。Mapper;importorg。apache。ibatis。annotations。Select;importjava。util。List;MapperpublicinterfaceAddressBookMapperextendsBaseMapper{}复制代码3)。业务层接口AddressBookServicepackagecom。itheima。reggie。service;importcom。baomidou。mybatisplus。extension。service。IService;importcom。itheima。reggie。entity。AddressBook;publicinterfaceAddressBookServiceextendsIService{}复制代码4)。业务层实现类AddressBookServiceImplpackagecom。itheima。reggie。service。impl;importcom。baomidou。mybatisplus。extension。service。impl。ServiceImpl;importcom。itheima。reggie。entity。AddressBook;importcom。itheima。reggie。mapper。AddressBookMapper;importcom。itheima。reggie。service。AddressBookService;importorg。springframework。stereotype。Service;ServicepublicclassAddressBookServiceImplextendsServiceImplimplementsAddressBookService{}复制代码5)。控制层AddressBookController1。逻辑:A。新增地址逻辑说明: 需要记录当前是哪个用户的地址(关联当前登录用户) B。设置默认地址 每个用户可以有很多地址,但是默认地址只能有一个;先将该用户所有地址的isdefault更新为0,然后将当前的设置的默认地址的isdefault设置为1 C。根据ID查询地址 D。查询默认地址 根据当前登录用户ID以及isdefault进行查询,查询当前登录用户isdefault为1的地址信息 E。查询指定用户的全部地址 根据当前登录用户ID,查询所有的地址列表2代码:packagecom。itheima。reggie。controller;importcom。baomidou。mybatisplus。core。conditions。query。LambdaQueryWrapper;importcom。baomidou。mybatisplus。core。conditions。update。LambdaUpdateWrapper;importcom。baomidou。mybatisplus。extension。plugins。pagination。Page;importcom。itheima。reggie。common。BaseContext;importcom。itheima。reggie。common。R;importcom。itheima。reggie。entity。AddressBook;importcom。itheima。reggie。service。AddressBookService;importlombok。extern。slf4j。Slf4j;importorg。springframework。beans。factory。annotation。Autowired;importorg。springframework。util。CollectionUtils;importorg。springframework。web。bind。annotation。;importjava。util。List;地址簿管理Slf4jRestControllerRequestMapping(addressBook)publicclassAddressBookController{AutowiredprivateAddressBookServiceaddressBookService;新增PostMappingpublicRsave(RequestBodyAddressBookaddressBook){addressBook。setUserId(BaseContext。getCurrentId());log。info(addressBook:{},addressBook);addressBookService。save(addressBook);returnR。success(addressBook);}设置默认地址PutMapping(default)publicRsetDefault(RequestBodyAddressBookaddressBook){log。info(addressBook:{},addressBook);LambdaUpdateWrapperwrappernewLambdaUpdateWrapper();wrapper。eq(AddressBook::getUserId,BaseContext。getCurrentId());wrapper。set(AddressBook::getIsDefault,0);SQL:updateaddressbooksetisdefault0whereuserid?addressBookService。update(wrapper);addressBook。setIsDefault(1);SQL:updateaddressbooksetisdefault1whereid?addressBookService。updateById(addressBook);returnR。success(addressBook);}根据id查询地址GetMapping({id})publicRget(PathVariableLongid){AddressBookaddressBookaddressBookService。getById(id);if(addressBook!null){returnR。success(addressBook);}else{returnR。error(没有找到该对象);}}查询默认地址GetMapping(default)publicRgetDefault(){LambdaQueryWrapperqueryWrappernewLambdaQueryWrapper();queryWrapper。eq(AddressBook::getUserId,BaseContext。getCurrentId());queryWrapper。eq(AddressBook::getIsDefault,1);SQL:selectfromaddressbookwhereuserid?andisdefault1AddressBookaddressBookaddressBookService。getOne(queryWrapper);if(nulladdressBook){returnR。error(没有找到该对象);}else{returnR。success(addressBook);}}查询指定用户的全部地址GetMapping(list)publicRListlist(AddressBookaddressBook){addressBook。setUserId(BaseContext。getCurrentId());log。info(addressBook:{},addressBook);条件构造器LambdaQueryWrapperqueryWrappernewLambdaQueryWrapper();queryWrapper。eq(null!addressBook。getUserId(),AddressBook::getUserId,addressBook。getUserId());queryWrapper。orderByDesc(AddressBook::getUpdateTime);SQL:selectfromaddressbookwhereuserid?orderbyupdatetimedescreturnR。success(addressBookService。list(queryWrapper));}}复制代码3功能测试 测试过程中,通过debug断点调试观察服务端程序的执行过程,在浏览器中使用调试工具查看页面和服务端的交互过程和请求响应数据。 2)。列表查询 当新增地址完成后,页面会再次发送一个请求,来查询该用户的所有地址列表,在界面进行展示。 编辑3)。设置默认 在地址列表页面中,勾选设为默认地址,此时会发送PUT请求,来设置默认地址。