欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot電腦商城項目刪除收貨地址的實現(xiàn)方法

 更新時間:2023年09月12日 11:20:11   作者:m0_63077733  
這篇文章主要介紹了SpringBoot項目--電腦商城刪除收貨地址功能實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

1.持久層[Mapper]

1規(guī)劃需要執(zhí)行的SQL語句

1.在刪除之前判斷該數(shù)據(jù)是否存在,需要執(zhí)行查詢語句看能否查到該數(shù)據(jù),還需要根據(jù)返回的aid獲取uid并和session中的uid進行比較判斷歸屬是否正確,這一條SQL語句在設(shè)置收貨地址時已經(jīng)開發(fā),無需重復(fù)開發(fā)

2.開發(fā)執(zhí)行刪除的SQL語句

delete from t_address where aid=?

3.需要判斷刪除的地址是否是默認地址(使用aid查詢到的地址對象的getIsDefault方法),如果判斷出刪的是默認地址,則還需要定義把哪個地址設(shè)為默認,這里定義最新修改的為默認地址.

開發(fā)該SQL語句

select * from t_address where uid=? order by modified_time DESC limit 0,1

其中l(wèi)imit 0,1表示查詢到的第一條數(shù)據(jù)(limit (n-1),pageSize),這樣查詢后就只會獲得第一條數(shù)據(jù)

4.如果用戶本身就只有一條地址,那么刪除后其他操作就可以不進行了,所以需要查詢該用戶的所有地址數(shù)量,在設(shè)置收貨地址時已經(jīng)開發(fā),無需重復(fù)開發(fā)

2 設(shè)計接口和抽象方法

在AddressMapper接口中進行抽象方法的設(shè)計

/** * 根據(jù)收貨地址id刪除收貨地址數(shù)據(jù) * @param aid 收貨地址的id * @return 受影響的行數(shù) */Integer deleteByAid(Integer aid);/** * 根據(jù)用戶uid查詢用戶最后一次被修改的收貨地址數(shù)據(jù) * @param uid 用戶id * @return 收貨地址數(shù)據(jù) */Address findLastModified(Integer uid);

3編寫映射

在AddressMapper.xml文件中進行映射

<delete id="deleteByAid">
    delete from t_address where aid=#{aid}
</delete>
<select id="findLastModified" resultMap="AddressEntityMap">
    select * from t_address
    where uid=#{uid}
    order by modified_time DESC limit 0,1
</select>

4單元測試

@Test
public void deleteByAid() {
    addressMapper.deleteByAid(11);
}
@Test
public void findLastModified() {
    System.out.println(addressMapper.findLastModified(11));
}
}

2.業(yè)務(wù)層[Service]

1規(guī)劃異常

  • 可能沒有該條地址數(shù)據(jù)(已開發(fā))
  • 可能地址數(shù)據(jù)歸屬錯誤(已開發(fā))
  • 在執(zhí)行刪除的時候可能會產(chǎn)生未知的異常導(dǎo)致數(shù)據(jù)不能夠刪除成功,則拋出DeleteException異常,在service創(chuàng)建該異常并使其繼承業(yè)務(wù)層異常
/**刪除數(shù)據(jù)時產(chǎn)生的異常*/
public class DeleteException extends ServiceException{
    /**重寫ServiceException的所有構(gòu)造方法*/
}

2設(shè)計接口和抽象方法及實現(xiàn)

1.在IAddressService接口中定義抽象方法

需要給抽象方法聲明哪些參數(shù)呢:

根據(jù)分析可得,該抽象方法的實現(xiàn)依賴于持久層的以下方法:

1.findByAid:查詢該條地址數(shù)據(jù)是否存在,參數(shù)是aid

3.deleteByAid:刪除地址數(shù)據(jù),參數(shù)是aid

5.countByUid:統(tǒng)計用戶地址數(shù)量,參數(shù)是uid

6.findLastModified:查詢得到最后修改的一條地址,參數(shù)是uid

7.updateDefaultByAid:設(shè)置默認收貨地址,參數(shù)是aid,modifiedUser,modifiedTime

稍加分析可以得出接下來定義的抽象方法的參數(shù)是:aid,uid,username

把上面的分析補上:2.判斷地址數(shù)據(jù)歸屬是否正確4.判斷刪除的是否是默認地址.這七步就是業(yè)務(wù)層完整的開發(fā)流程

/**
* 刪除用戶選中的收貨地址數(shù)據(jù)
* @param aid 收貨地址id
* @param uid 用戶id
* @param username 用戶名
*/
void delete(Integer aid,Integer uid,String username);

2.實現(xiàn)該抽象方法

@Override
public void delete(Integer aid, Integer uid, String username) {
    Address result = addressMapper.findByAid(aid);
    //1.
    if (result == null) {
        throw new AddressNotFoundException("收貨地址數(shù)據(jù)不存在");
    }
    //2.
    if (!result.getUid().equals(uid)) {
        throw new AccessDeniedException("非法數(shù)據(jù)訪問");
    }
    //3.
    Integer rows = addressMapper.deleteByAid(aid);
    if (rows != 1) {
        throw new DeleteException("刪除數(shù)據(jù)時產(chǎn)生未知的異常");
    }
    //4.如果刪除的是非默認地址則不需要再做后面的任何操作,終止程序
    if (result.getIsDefault() == 0) {
        return;
    }
    //5.
    Integer count = addressMapper.countByUid(uid);
    if (count == 0) {
        return;
    }
    //6.
    Address address = addressMapper.findLastModified(uid);
    //7.
    rows = addressMapper.updateDefaultByAid(address.getAid(), username, new Date());
    if (rows != 1) {
        throw new UpdateException("更新數(shù)據(jù)時產(chǎn)生未知的異常");
    }
}

3單元測試

@Test
public void delete() {
    addressService.delete(1,11,"4.11刪除");
}

3.控制層[Controller]

1處理異常

需要在BaseController類中處理異常類

else if (e instanceof DeleteException) {
    result.setState(5002);
    result.setMessage("刪除數(shù)據(jù)時產(chǎn)生未知的異常");
}

2設(shè)計請求

  • /addresses/{aid}/delete
  • POST
  • Integer aid,HttpSession session
  • JsonResult<Void>

3處理請求

@RequestMapping("{aid}/delete")
public JsonResult<Void> delete(@PathVariable("aid") Integer aid,HttpSession session) {
    addressService.delete(
        aid,
        getUidFromSession(session),
        getUsernameFromSession(session));
    return new JsonResult<>(OK);
}

4單元測試

在AddressController類編寫請求處理方法的實現(xiàn)

這個方法就只是調(diào)用業(yè)務(wù)層方法然后給前端返回一些信息,可以選擇不用測試

4.前端頁面

處理該前端頁面的所有步驟和處理"設(shè)置默認收貨地址"的一樣

1.給"刪除"按鈕添加onclick屬性并指向deleteByAid(aid)方法

<td><a onclick="delete(#{aid})" class="btn btn-xs add-del btn-info"><span class="fa fa-trash-o"></span> 刪除</a></td>

2.給占位符賦值

因為處理"設(shè)置默認收貨地址"時已經(jīng)編寫tr = tr.replace(“#{aid}”,list[i].aid);用來給占位符#{aid}賦值,所以這里不需要再寫.但是需要把replace改為replaceAll

3.完成deleteByAid(aid)方法的聲明

function setDefault(aid) {
    $.ajax({
        url: "/addresses/"+aid+"/set_default",
        type: "POST",
        //data: $("#form-change-password").serialize(),
        dataType: "JSON",
        success: function (json) {
            if (json.state == 200) {
                //重新加載收貨地址列表頁面
                showAddressList();
            } else {
                alert("刪除收貨地址失敗")
            }
        },
        error: function (xhr) {
            alert("刪除收貨地址時產(chǎn)生未知的異常!"+xhr.message);
        }
    });
}

到此這篇關(guān)于SpringBoot項目--電腦商城刪除收貨地址的文章就介紹到這了,更多相關(guān)SpringBoot刪除收貨地址內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • seata的部署和集成詳細介紹

    seata的部署和集成詳細介紹

    這篇文章主要介紹了Java seata的部署和集成,文章中有詳細的代碼示例和圖片講解,對學(xué)習(xí)seata有一定的參考價值,需要的朋友可以參考一下
    2023-04-04
  • maven依賴關(guān)系中的<scope>provided</scope>使用詳解

    maven依賴關(guān)系中的<scope>provided</scope>使用詳解

    這篇文章主要介紹了maven依賴關(guān)系中的<scope>provided</scope>使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • intelliJ idea 2023 配置Tomcat 8圖文教程

    intelliJ idea 2023 配置Tomcat 8圖文教程

    這篇文章主要介紹了intelliJ idea 2023 配置Tomcat 8教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    Java中ThreadLocal避免內(nèi)存泄漏的方法詳解

    ThreadLocal是Java中的一個線程本地存儲機制,它允許每個線程擁有一個獨立的本地存儲空間,用于存儲該線程的變量,本文主要介紹了ThreadLocal如何避免內(nèi)存泄漏,需要的朋友可以參考下
    2023-05-05
  • JAVA8 STREAM COLLECT GROUPBY分組實例解析

    JAVA8 STREAM COLLECT GROUPBY分組實例解析

    這篇文章主要介紹了JAVA8 STREAM COLLECT GROUPBY分組實例解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • springboot整合mqtt實現(xiàn)消息訂閱和推送功能

    springboot整合mqtt實現(xiàn)消息訂閱和推送功能

    mica-mqtt-client-spring-boot-starter是一個方便、高效、可靠的MQTT客戶端啟動器,適用于需要使用MQTT協(xié)議進行消息通信的Spring Boot應(yīng)用程序,這篇文章主要介紹了springboot整合mqtt實現(xiàn)消息訂閱和推送功能,需要的朋友可以參考下
    2024-02-02
  • SpringBoot實現(xiàn)自定義事件的方法詳解

    SpringBoot實現(xiàn)自定義事件的方法詳解

    這篇文章將用實例來和大家介紹一下如何在SpringBoot中自定義事件來使用觀察者模式。文中的示例代碼講解詳細,對我們學(xué)習(xí)SpringBoot有一定的幫助,需要的可以參考一下
    2022-06-06
  • Java Spring之@Async原理案例詳解

    Java Spring之@Async原理案例詳解

    這篇文章主要介紹了Java Spring之@Async原理案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • springboot war包部署過程詳解

    springboot war包部署過程詳解

    這篇文章主要為大家介紹了springboot war包部署過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • JVM中判定對象需要回收的方法

    JVM中判定對象需要回收的方法

    這篇文章主要介紹了jvm中如何判定對象需要回收,jvm在確定是否回收的對象的時候采用的是root搜索算法來實現(xiàn),需要的朋友可以參考下
    2022-04-04

最新評論