最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1.持久層[Mapper]

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

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

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

delete from t_address where aid=?

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

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

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

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

/** * 根據(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文件中進(jìn)行映射

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

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

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

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

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

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

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

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

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

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

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

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

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

2.實(shí)現(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ù)時(shí)產(chǎn)生未知的異常");
    }
    //4.如果刪除的是非默認(rèn)地址則不需要再做后面的任何操作,終止程序
    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ù)時(shí)產(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ù)時(shí)產(chǎn)生未知的異常");
}

2設(shè)計(jì)請求

  • /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類編寫請求處理方法的實(shí)現(xiàn)

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

4.前端頁面

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

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.給占位符賦值

因?yàn)樘幚?quot;設(shè)置默認(rèn)收貨地址"時(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("刪除收貨地址時(shí)產(chǎn)生未知的異常!"+xhr.message);
        }
    });
}

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

相關(guān)文章

  • SpringBoot項(xiàng)目整合Netty啟動失敗的常見錯(cuò)誤總結(jié)

    SpringBoot項(xiàng)目整合Netty啟動失敗的常見錯(cuò)誤總結(jié)

    本文總結(jié)了Spring Boot集成Netty時(shí)常見的8類問題及解決方案,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-11-11
  • Springboot使用zxing實(shí)現(xiàn)二維碼生成和解析

    Springboot使用zxing實(shí)現(xiàn)二維碼生成和解析

    ZXing支持各種條形碼,二維碼掃描,由多個(gè)模塊組成,?而且支持PC端,移動端,本文將利用zxing實(shí)現(xiàn)二維碼生成和解析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • Java如何簡單快速入門JWT(token生成與驗(yàn)證)

    Java如何簡單快速入門JWT(token生成與驗(yàn)證)

    這篇文章主要給大家介紹了關(guān)于Java如何簡單快速入門JWT(token生成與驗(yàn)證)的相關(guān)資料,JWT是一個(gè)加密的字符串,JWT傳輸?shù)男畔⒔?jīng)過了數(shù)字簽名,因此傳輸?shù)男畔⒖梢员或?yàn)證和信任,需要的朋友可以參考下
    2023-12-12
  • SpringBoot+Netty實(shí)現(xiàn)簡單聊天室的示例代碼

    SpringBoot+Netty實(shí)現(xiàn)簡單聊天室的示例代碼

    這篇文章主要介紹了如何利用SpringBoot Netty實(shí)現(xiàn)簡單聊天室,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)SpringBoot有一定幫助,感興趣的同學(xué)可以了解一下
    2022-02-02
  • 一個(gè)處理用戶登陸的servlet簡單實(shí)例

    一個(gè)處理用戶登陸的servlet簡單實(shí)例

    這篇文章主要介紹了一個(gè)處理用戶登陸的servlet簡單實(shí)例,可通過servlet實(shí)現(xiàn)處理用戶登錄的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-01-01
  • springboot實(shí)現(xiàn)yml里的自定義配置方法

    springboot實(shí)現(xiàn)yml里的自定義配置方法

    這篇文章主要介紹了springboot實(shí)現(xiàn)yml里的自定義配置方法,主要介紹三種,字符串配置,數(shù)組配置和帶默認(rèn)值的配置,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Java 駝峰命名法詳解(必看篇)

    Java 駝峰命名法詳解(必看篇)

    下面小編就為大家?guī)硪黄狫ava 駝峰命名法詳解(必看篇)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • JAVA中split函數(shù)的常見用法實(shí)例

    JAVA中split函數(shù)的常見用法實(shí)例

    Java中我們可以利用split把字符串按照指定的分割符進(jìn)行分割,然后返回字符串?dāng)?shù)組,下面這篇文章主要給大家介紹了關(guān)于JAVA中split函數(shù)的常見用法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • mybatis如何使用truncate清空表

    mybatis如何使用truncate清空表

    這篇文章主要介紹了mybatis如何使用truncate清空表,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java動態(tài)線程池插件dynamic-tp集成zookeeper

    Java動態(tài)線程池插件dynamic-tp集成zookeeper

    ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。它是一個(gè)為分布式應(yīng)用提供一致性的軟件,提供的功能包括:配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等
    2023-03-03

最新評論

堆龙德庆县| 双牌县| 涪陵区| 高陵县| 丹江口市| 静乐县| 石屏县| 杨浦区| 聂荣县| 密云县| 获嘉县| 金堂县| 久治县| 万全县| 开化县| 安阳县| 惠来县| 尉犁县| 黄大仙区| 张北县| 本溪市| 五台县| 筠连县| 广汉市| 德阳市| 锦州市| 全州县| 龙江县| 北川| 藁城市| 皮山县| 同德县| 新龙县| 巨鹿县| 沙雅县| 穆棱市| 科技| 谢通门县| 南川市| 前郭尔| 阳东县|