删除收货地址

删除收货地址


持久层

规划需要执行的SQL语句。

1.在删除之前判断该数据是否存在,判断该条地址的归属是否是当前的用户。不用重复开发。
2.执行删除收货地址的信息。

delect * from t_address where aid=?

3.如果用户删除的是默认收货地址,将剩下的地址中的某一条设置为默认的收货地址。规则可以自定义:最新修改的收货地址设置为默认的收货地址(modified_time的字段值)。

#limit (n-1)n,pageSize
select * from t_address where uid=? order by modified_time DESC limit 0,1

4.如果用户本身就只有一条收货地址的数据,删除后其他操作就可以不进行了。

设计抽象方法

在AddressMapper中进行抽象方法的设计。

/**
 * 根据地址id删除地址信息
 * @param aid   地址id
 * @return 影响的行数
 */
Integer deleteByAid(Integer aid);

/**
 * 根据uid查询最后一次修改的地址
 * @param uid 用户id
 * @return 地址信息
 */
Address findLastModified(Integer uid);

映射SQL语句

在AddressMapper.xml文件中进行映射。

<delete id="deleteByAid">
    DELETE FROM t_address WHERE aid=#{aid}
</delete>

<select id="findLastModified">
    SELECT * FROM t_address WHERE uid=#{uid} ORDER BY modified_time DESC LIMIT 0,1 
</select>

在测试类中进行测试

 @Test
public void deleteByAid(){
        Integer integer = addressMapper.deleteByAid(2);
        System.out.println(integer);
    }

    @Test
public void findLastModified(){
        Address lastModified = addressMapper.findLastModified(7);
        System.out.println(lastModified);
    }

业务层

规划异常

在执行删除的时候可能会产生未知的异常导致数据不能删除成功,则抛出DeleteException异常。需要定义和创建。

/*删除数据时产生的异常*/
public class DeleteException extends ServiceException {...}

抽象方法的设计

在IAddressService编写抽象方法

	/**删除用户的收货地址*/
    void delete(Integer aid,Integer uid,String username);AddressServiceImpl类中实现接口中的抽象方法
    @Override
    public void delete(Integer aid, Integer uid, String username) {
        Address result = addressMapper.findByAid(aid);
        if(result == null){
            throw new AddressNotFoundException("地址信息不存在");
        }//检测当前收货地址归属
        if(!result.getUid().equals(uid)){
            throw new AccessDeniedException("非法数据访问");
        }
        Integer rows = addressMapper.deleteByAid(aid);
        if(rows!= 1){
            throw new UpdateException("删除用户地址时产生了未知的异常");
        }
        Integer count = addressMapper.countByUid(uid);
        if(count == 0){
            //直接终止程序
            return;
        }
        if(result.getIsDefault() == 0){
            return;
        }
        Address address = addressMapper.findLastModified(uid);
        //将这条数据的idDefault设置为1
        Integer integer = addressMapper.updateDefaultByAid(address.getAid(), username, new Date());
        if(integer != 1){
            throw new UpdateException("更新数据时产生未知的异常");
        }
    }

测试类进行测试

  @Test
    public void delete(){
        addressService.delete(16,7,"管理员");
    }

控制层

1.需要处理异常DeleteException类。

else if(e instanceof DeleteException){
        result.setstate(5002);
        result.setMessage("删除数据时发生了未知的异常");
    }

2.设计请求处理。
/addresses/{aid}/delete
POST
Integer aid,HttpSession session
JsonResult
3.编写请求处理方法的实现

//使用RestFul风格编写{}里面大数据所对应的值必须用@PathVariable()相对应,不然找不到
@RequestMapping("/{aid}/delete")
public JsonResult<Void> delete(@PathVariable("aid") Integer aid,HttpSession session){
    Integer uid = getUidFromSession(session);
    String username = getUsernameFromSession(session);
    addressService.delete(aid,uid,username);
return new JsonResult<>(OK);
}

4.访问地址localhost:8080/addresses/{aid}/delete进行测试。

前端页面

在address.html页面中来添加删除按钮的事件

	'<td><a οnclick="deleteByAid(#{aid})" class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 删除</a></td>\n' 
再去编写deleteByAid(aid)方法的具体实现
	function deleteByAid(aid) {
		$.ajax({
			url: "/addresses/" + aid + "/delete",
			type: "POST",
			dataType: "JSON",
			success: function(json) {
				if (json.state == 200) {
					showAddressList();
				} else {
					alert("删除收货地址失败!" + json.message);
				}
			},
			error: function(json) {
				alert("您的登录信息已经过期,请重新登录!HTTP响应码:" + json.status);
				location.href = "login.html";
			}
		});
	}

登录系统,再访问收货地址页面进行删除的数据测试。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值