刪除收貨地址
刪除收貨地址
1 刪除收貨地址-持久層
1.1 規劃需要執行的SQL語句
1.在刪除之前,需檢查資料是否存在,資料歸屬是否正確。此功能已完成,無需再次開發。
2.刪除指定的收貨地址的SQL語句大致是。
delete from t_address where aid=?
3.如果刪除的這條資料是預設收貨地址,則應該將剩餘的收貨地址中的某一條設定為預設收貨地址,可以設定規則“將最近修改的設定為預設收貨地址”,要實現此功能就必須要知道“最近修改的收貨地址的id是多少”。則通過以下查詢語句完成。
select * from t_address where uid=? order by modified_time desc limit 0,1
4.在執行以上操作之前,還需檢查該使用者的收貨地址資料的數量,如果刪除的收貨地址是最後一條收貨地址,則刪除成功後無需再執行其他操作。統計收貨地址數量的功能此前已經完成,無需再次開發。
1.2 介面與抽象方法
在AddressMapper介面中新增抽象方法。
/**
* 根據收貨地址id刪除資料
* @param aid 收貨地址id
* @return 受影響的行數
*/
Integer deleteByAid(Integer aid);
/**
* 查詢某使用者最後修改的收貨地址
* @param uid 歸屬的使用者id
* @return 該使用者最後修改的收貨地址,如果該使用者沒有收貨地址資料則返回null
*/
Address findLastModified(Integer uid);
1.3 配置SQL對映
1.在AddressMapper.xml檔案中新增以上兩個抽象方法的對映。
<!-- 根據收貨地址id刪除資料:Integer deleteByAid(Integer aid) -->
<delete id="deleteByAid">
DELETE FROM
t_address
WHERE
aid=#{aid}
</delete>
<!-- 查詢某使用者最後修改的收貨地址:Address findLastModified(Integer uid) -->
<select id="findLastModified" resultMap="AddressEntityMap">
SELECT
*
FROM
t_address
WHERE
uid=#{uid}
ORDER BY
modified_time DESC
LIMIT 0,1
</select>
2.在AddressMapperTests測試類中新增單元測試方法。
2 刪除收貨地址-業務層
2.1 規劃異常
在執行刪除操作時,可能會刪除資料失敗,此時丟擲DeleteException異常。在建立com.cy.store.service.ex.DeleteException異常類,並繼承自ServiceException類。
package com.cy.store.service.ex;
/** 刪除資料失敗的異常 */
public class DeleteException extends ServiceException {
// Override Methods...
}
2.2 介面與抽象方法
在IAddressService介面中新增刪除收貨地址的抽象方法。
/**
* 刪除收貨地址
* @param aid 收貨地址id
* @param uid 歸屬的使用者id
* @param username 當前登入的使用者名稱
*/
void delete(Integer aid, Integer uid, String username);
2.3 實現抽象方法
1.在AddressServiceImpl實現類中實現以上兩個抽象方法。
2.在AddressServiceTests測試類中新增單元測試方法。
3 刪除收貨地址-控制器
3.1 處理異常
在BaseController類中新增DeleteException異常的處理。
// ...
else if (e instanceof DeleteException) {
result.setState(5002);
}
// ...
3.2 設計請求
設計使用者提交的請求,並設計響應的方式。
請求路徑:/addresses/{aid}/delete
請求引數:@PathVariable("aid") Integer aid, HttpSession session
請求型別:POST
響應結果:JsonResult<Void>
3.3 處理請求
1.在AddressController類中新增處理請求的delete()方法。
2.完成後啟動專案,開啟瀏覽器先登入,再訪問http://localhost:8080/addresses/26/delete進行測試。
4 刪除收貨地址-前端頁面
1.在address.html頁面中body標籤內部的script標籤內,新增設定使用者刪除收貨地址的程式碼。
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";
}
});
}
2.給showAddressList()方法中的“設為預設”超連結按鈕新增設定預設收貨地址的點選事件。
<td><a onclick="deleteByAid(#{aid})" class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td>
3.完成後啟動專案,開啟瀏覽器先登入,再訪問http://localhost:8080/web/address.html頁面,點選“刪除”超連結按鈕進行功能測試。