这一块比较简单就是一个表的增删改查,也不涉及别的知识,所以黑马就是带着我们导入了一下代码,所以这里做点简单的解释就过去了。
首先看下效果图:

简单来说包括以下几点功能:
1.查询当前登录用户的所有地址
2.查询当前登录用户的默认地址
3.新增地址
4.根据id查询地址
5.根据id查询地址
6.设置为默认地址
7.根据id删除地址
一、查询用户所有收货地址
接口文档如下:

显然这里我们需要新建一个AddressBookController这里的返回值应该新建一个VO对象如下所示:

之后就是本质就是一个根据用户ID查地址表的操作,由于用户可能不止一个收货地址所以查出来的是一个List,controller层代码如下:

当前用户的ID存在了threadlocal中,这里传入addressbook对象进行查找而不是只用一个id查,因为可以用动态SQL以后可以复用!
service层仅仅单纯调用了mapper层的查找所以这里直接放mapper层的代码:

多出的两个条件,一个是之后查询默认地址可以复用,还有一个是精确查找通过手机号!
二、查找用户默认收货地址
其实和上面基本一致,只不过我们在封装addressbook的时候还需要给它的属性is_default进行赋值
代码如下:

当前我们可能是没有默认地址的,所以需要判别一下。而且这里的默认地址由于只有一个所以用list.get(0)~~~
三、新增地址
通过以前的经验,应该是前端传过来一个关于地址的DTO对象,最后我们封装成addressbook对象进行SQL的插入。看看接口文档是否如此:

这里由于前端传过来的和addressbook字段一致,所以直接用addressbook接收,controller代码如下:

这里的service层有两行代码,如下所示:

一个是设置默认字段以及用户id,为什么要这么做原因如下:

mapper层就是一个简单的插入SQL:

四、根据id查地址
这里的id是addressbook表的id,为什么需要这个接口呢,因为我们修改地址的时候需要显示当前地址的信息,如图所示:

所以其实本质就是,最初我们有一个list接口帮助查出所有地址,这个时候前端就拿到了所有地址的id,之后再去点击修改,它会把这个id重新发回后端,我们就能准确到底需要修改的地址并且展示出来以及修改。
代码就很简单了就是一个根据id查询:


五、根据id修改地址
先看接口文档:

本质就是前端传过来一些参数,封装到addressbook中,利用动态SQL进行update


六、设置为默认地址
其实本质是一个update功能,但是由于默认地址只能有一个,当我们设置一个新地址为默认地址之后就需要将其他地址设置为非默认地址。
涉及的操作
1.首先将所有地址设为非默认
2.设置该id的地址为默认
由于是两个更新操作,并且要保持事务一致性,别忘了加transactional

七、根据id删除地址
很简单不说了。。。