栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

10天手敲一个SpringBoot网上商城项目(五)——收货地址列表展示及设置默认收货地址功能的实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

10天手敲一个SpringBoot网上商城项目(五)——收货地址列表展示及设置默认收货地址功能的实现

静态资源及sql文件分享
链接:https://pan.baidu.com/s/1X-yjmQcPD3PqS21x0HplNA?pwd=23gr
提取码:23gr

文章目录
    • 收货地址列表展示
      • 1.收货地址列表展示-持久层
        • 1.1规划需要执行的SQL语句
        • 1.2设计接口和抽象方法
        • 1.3编写映射
        • 1.4单元测试
      • 2.收货地址列表展示-业务层
        • 2.1规划异常
        • 2.2设计接口和抽象方法及实现
        • 2.3单元测试
      • 3.收货地址列表展示-控制层
        • 3.1处理异常
        • 3.2设计请求
        • 3.3处理请求
    • 设置默认收货地址
      • 1.设置默认收货地址-持久层
        • 1.1规划需要执行的SQL语句
        • 1.2设计接口和抽象方法
        • 1.3编写映射
        • 1.4单元测试
      • 2.设置默认收货地址-业务层
        • 2.1规划异常
        • 2.2设计接口和抽象方法及实现
        • 2.3单元测试
      • 3.设置默认收货地址-控制层
        • 3.1处理异常
        • 3.2设计请求
        • 3.3处理请求
      • 4.设置默认收货地址-前端页面

收货地址列表展示 1.收货地址列表展示-持久层 1.1规划需要执行的SQL语句

数据库数据的查询操作

select * from t_address where uid ? order by is_default DESC,created_time DESC

其中order by is_default DESC是为了让默认收货地址展示在最上面,order by可以有多个字句,中间用逗号隔开,后面加的create_time DESC是为了让非默认收货地址创建的越晚越展示在上面

1.2设计接口和抽象方法

在AddressMapper接口追加抽象方法findByUid

List
findByUid(Integer uid);
1.3编写映射

在xml文件添加相应的sql语句映射

    
        select * from t_address where uid=#{uid}
        order by is_default DESC,created_time DESC
    
1.4单元测试
@Test
public void findByUid () {
    List
list = addressMapper.findByUid(11); System.out.println(list); }
2.收货地址列表展示-业务层 2.1规划异常

该模块只是为了展示列表,不涉及到增删改,即便没有拿到任何数据,那无非就是不展示呗,所以不涉及到异常,不需要在业务层抛出异常

2.2设计接口和抽象方法及实现

1.定义抽象方法

List
getByUid(Integer uid);

2.实现该方法

@Override
public List
getByUid(Integer uid) { List
list = addressMapper.findByUid(uid); for (Address address : list) { //address.setAid(null); address.setUid(null); //address.setProvinceName(null); address.setProvinceCode(null); //address.setCityName(null); address.setCityCode(null); //address.setAreaName(null); address.setAreaCode(null); address.setZip(null); //address.setTel(null); address.setIsDefault(null); address.setCreatedTime(null); address.setCreatedUser(null); address.setModifiedTime(null); address.setModifiedUser(null); } return list; }
2.3单元测试

这里不再进行单元测试

3.收货地址列表展示-控制层 3.1处理异常

因为业务层没有抛出异常,所以这里不需要处理异常

3.2设计请求
  • /addresses
  • HttpSession session
  • get(该功能模块只需要uid,不需要别的数据,而且uid也是在后端封装的,所以前端没有提交什么数据,体量很小可以用get)
  • JsonResult
3.3处理请求

实现请求方法的编写

@RequestMapping({"","/"})
public JsonResult> getByUid(HttpSession session) {
    Integer uid = getUidFromSession(session);
    List
data = addressService.getByUid(uid); return new JsonResult<>(OK,data); }

启动服务,登录账号后在地址栏输入http://localhost:8080/addresses测试能否拿到数据

###4.收货地址列表展示-前端页面

在address.html中编写js代码


设置默认收货地址 1.设置默认收货地址-持久层 1.1规划需要执行的SQL语句

无论选择的是哪一条数据,都把所有的数据设为非默认,再把当前数据设为默认

我们可能会想着把第一条设为非默认,再将该条设为默认,但这样处理的话需要额外做一条查询语句拿到默认地址的数据

1.检测当前用户想设置为默认收货地址的这条数据是否存在

select * from t_address where aid=?

2.在修改用户的默认收货地址之前先将所有的收货地址设置为非默认

update t_address set is_default=0 where uid=?

3.将用户选中的这条记录设置为默认收货地址

update t_address set is_default=1,modified_user=?,modified_time=? where aid=?
1.2设计接口和抽象方法

在AddressMapper接口中来定义实现该模块所需的三个方法

Address findByAid(Integer aid);


Integer updateNonDefault(Integer uid);


Integer updateDefaultByAid(
    @Param("aid") Integer aid,
    @Param("modifiedUser") String modifiedUser,
    @Param("modifiedTime") Date modifiedTime);
1.3编写映射

在AddressMapper.xml中编写映射