国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

SpringBoot項(xiàng)目--電腦商城【加入購物車】

這篇具有很好參考價(jià)值的文章主要介紹了SpringBoot項(xiàng)目--電腦商城【加入購物車】。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.創(chuàng)建數(shù)據(jù)表

1.使用use命令先選中store數(shù)據(jù)庫

USE store;

2.在store數(shù)據(jù)庫中創(chuàng)建t_cart用戶數(shù)據(jù)表

CREATE TABLE t_cart (
	cid INT AUTO_INCREMENT COMMENT '購物車數(shù)據(jù)id',
	uid INT NOT NULL COMMENT '用戶id',
	pid INT NOT NULL COMMENT '商品id',
	price BIGINT COMMENT '加入時(shí)商品單價(jià)',
	num INT COMMENT '商品數(shù)量',
	created_user VARCHAR(20) COMMENT '創(chuàng)建人',
	created_time DATETIME COMMENT '創(chuàng)建時(shí)間',
	modified_user VARCHAR(20) COMMENT '修改人',
	modified_time DATETIME COMMENT '修改時(shí)間',
	PRIMARY KEY (cid)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

2.創(chuàng)建購物車的實(shí)體類

在entity包下創(chuàng)建購物車的Cart實(shí)體類并使其繼承BaseEntity

/**購物車數(shù)據(jù)的實(shí)體類*/
public class Cart extends BaseEntity {
    private Integer cid;
    private Integer uid;
    private Integer pid;
    private Long price;
    private Integer num;
/**
 * get,set
 * equals和hashCode
 * toString
 */
}

3.持久層[Mapper]

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

1.向購物車表中插入商品數(shù)據(jù)的SQL語句

insert into t_cart (除了cid以外的所有字段) values (匹配的值列表);

2.如果當(dāng)前商品已經(jīng)在購物車存在,則直接更新商品即可

update t_cart set num=? where cid=?

3.在插入或者更新具體執(zhí)行哪個(gè)語句,取決于數(shù)據(jù)庫中是否有當(dāng)前的這個(gè)購物車商品的數(shù)據(jù),需要查詢語句才能確定

select * from t_cart where uid=? and pid=?

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

在mapper包下創(chuàng)建CartMapper接口,并添加抽象方法

public interface CartMapper {
    
    /**
     * 插入購物車數(shù)據(jù)
     * @param cart 購物車數(shù)據(jù)
     * @return 受影響的行數(shù)
     */
    Integer insert(Cart cart);

    /**
     * 修改購物車數(shù)據(jù)中商品的數(shù)量
     * @param cid 購物車數(shù)據(jù)的id
     * @param num 新的數(shù)量
     * @param modifiedUser 修改執(zhí)行人
     * @param modifiedTime 修改時(shí)間
     * @return 受影響的行數(shù)
     */
    Integer updateNumByCid(
            @Param("cid") Integer cid,
            @Param("num") Integer num,
            @Param("modifiedUser") String modifiedUser,
            @Param("modifiedTime") Date modifiedTime);

    /**
     * 根據(jù)用戶id和商品id查詢購物車中的數(shù)據(jù)
     * @param uid 用戶id
     * @param pid 商品id
     * @return 匹配的購物車數(shù)據(jù),如果該用戶的購物車中并沒有該商品,則返回null
     */
    Cart findByUidAndPid(
            @Param("uid") Integer uid,
            @Param("pid") Integer pid);
}

3編寫映射

在resources.mapper文件夾下創(chuàng)建CartMapper.xml文件,并在文件中配置以上三個(gè)方法的映射

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.cy.store.mapper.CartMapper">
    <resultMap id="CartEntityMap" type="com.cy.store.entity.Cart">
        <id column="cid" property="cid"/>
        <result column="created_user" property="createdUser"/>
        <result column="created_time" property="createdTime"/>
        <result column="modified_user" property="modifiedUser"/>
        <result column="modified_time" property="modifiedTime"/>
    </resultMap>

    <!-- 插入購物車數(shù)據(jù)-->
    <insert id="insert" useGeneratedKeys="true" keyProperty="cid">
        insert into t_cart (uid, pid, price, num, created_user, created_time, modified_user, modified_time)
        values (#{uid}, #{pid}, #{price}, #{num}, #{createdUser}, #{createdTime}, #{modifiedUser}, #{modifiedTime})
    </insert>

    <!-- 修改購物車數(shù)據(jù)中商品的數(shù)量-->
    <update id="updateNumByCid">
        update t_cart set
            num=#{num},
            modified_user=#{modifiedUser},
            modified_time=#{modifiedTime}
        where cid=#{cid}
    </update>

    <!-- 根據(jù)用戶id和商品id查詢購物車中的數(shù)據(jù)-->
    <select id="findByUidAndPid" resultMap="CartEntityMap">
        select * from t_cart where uid=#{uid} AND pid=#{pid}
    </select>
</mapper>

4單元測試

創(chuàng)建CartMapperTests測試類進(jìn)行測試

@RunWith(SpringRunner.class)
@SpringBootTest
public class CartMapperTests {
    @Autowired
    private CartMapper cartMapper;

    @Test
    public void insert() {
        Cart cart = new Cart();
        cart.setUid(11);
        cart.setPid(10000001);
        cart.setNum(3);
        cart.setPrice(4L);//長整型
        cartMapper.insert(cart);
    }

    @Test
    public void updateNumByCid() {
        cartMapper.updateNumByCid(1, 4, "張三", new Date());
    }

    @Test
    public void findByUidAndPid() {
        Cart cart = cartMapper.findByUidAndPid(11, 10000001);
        System.out.println(cart);
    }
}

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

1規(guī)劃異常

在插入數(shù)據(jù)時(shí),可能拋出InsertException異常;在修改數(shù)據(jù)時(shí),可能拋出UpdateException異常.這兩個(gè)異常已開發(fā)

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

1.在com.cy.store.service包下創(chuàng)建ICartService接口,并添加抽象方法

該抽象方法都需要哪些參數(shù)呢,還是依據(jù)持久層,看持久層三條sql語句的實(shí)現(xiàn)需要什么參數(shù):

findByUidAndPid:查詢購物車數(shù)據(jù),參數(shù)是uid,pid

insert:插入購物車數(shù)據(jù),參數(shù)是cart對象(屬性有cid,uid,pid,price,num)

updateNumByCid:修改購物車中商品數(shù)量,參數(shù)是cid,num,modifiedUser,modifiedTime

price可以通過業(yè)務(wù)層中調(diào)用ProductMapper接口的findById獲取,modifiedTime在業(yè)務(wù)層實(shí)現(xiàn)類的內(nèi)部創(chuàng)建,所以需要的參數(shù)是uid,pid,num,username

經(jīng)過這次分析結(jié)合以前給業(yè)務(wù)層方法聲明參數(shù),可以發(fā)現(xiàn)即使持久層的方法參數(shù)是實(shí)體類對象,業(yè)務(wù)層的方法參數(shù)也大多不是實(shí)體類對象,因?yàn)閷?shí)體類的部分屬性是可以在業(yè)務(wù)層進(jìn)行拼接然后封裝到實(shí)體類對象中,再傳給持久層(比如這里的price),這樣的話就降低了前端傳遞數(shù)據(jù)的壓力,如果該對象的所有方法都必須由前端傳遞過來,那么業(yè)務(wù)層方法參數(shù)可以是實(shí)體類對象(如注冊用戶時(shí)業(yè)務(wù)層的方法參數(shù)就是User對象)

public interface ICartService {
    /**
     * 將商品添加到購物車
     * @param uid 當(dāng)前登錄用戶的id
     * @param pid 商品的id
     * @param amount 增加的數(shù)量
     * @param username 當(dāng)前登錄的用戶名
     */
    void addToCart(Integer uid, Integer pid, Integer amount, String username);
}

2.創(chuàng)建CartServiceImpl類,并實(shí)現(xiàn)ICartService接口.在類中聲明CartMapper持久層對象和IProductService處理商品數(shù)據(jù)的業(yè)務(wù)對象,并實(shí)現(xiàn)業(yè)務(wù)層的抽象方法

@Service
public class ICartServiceImpl implements ICartService {
    /*
    由于購物車的業(yè)務(wù)依賴于購物車和商品的持久層,若通過session獲取數(shù)據(jù)
     */
    @Autowired
    private CartMapper cartMapper;
    @Autowired
    private ProductMapper productMapper;

    @Override
    public void addToCart(Integer uid, Integer pid, Integer amount, String username) {
        //查詢購物車是否已經(jīng)存在【查看用戶之前是否將該商品加入過購物車】
        Cart result = cartMapper.findByUidAndPid(uid, pid);
        Date date = new Date();
        if(result == null) {//新增商品
            Cart cart = new Cart();
            //封裝數(shù)據(jù):uid,pid,amount
            cart.setUid(uid);
            cart.setPid(pid);
            cart.setNum(amount);
            //查詢商品數(shù)據(jù),得到商品價(jià)格進(jìn)行封裝
            Product product = productMapper.findById(pid);
            cart.setPrice(product.getPrice());

            //封裝數(shù)據(jù):4個(gè)日志
            cart.setCreatedUser(username);
            cart.setCreatedTime(date);
            cart.setModifiedUser(username);
            cart.setModifiedTime(date);

            Integer rows = cartMapper.insert(cart);

            if(rows != 1) {
                throw new InsertException("未知異常 在 插入數(shù)據(jù)");
            }
        } else {//更新num值
            //從查詢結(jié)果中取出原數(shù)量,與參數(shù)amount相加,得到新的數(shù)量
            Integer num = result.getNum() + amount;//加入購物車時(shí)只會有+不可能有-

            Integer rows = cartMapper.updateNumByCid(result.getCid(), num, username, date);

            if(rows != 1) {
                throw new UpdateException("未知異常 在 更新數(shù)據(jù)");
            }
        }
    }
}

3單元測試

創(chuàng)建測試類CartServiceTests并編寫測試方法。

@RunWith(SpringRunner.class)
@SpringBootTest
public class CartServiceTests {
    @Autowired
    private ICartService cartService;

    @Test
    public void addToCart() {
        cartService.addToCart(11, 10000002, 5, "Tom");
    }
}

5.控制層[Contrroller]

1處理異常

InsertException異常和UpdateException異常都已經(jīng)設(shè)置到BaseController類中了,這里無需重復(fù)開發(fā)

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

  • /carts/add_to_cart
  • post
  • Integer pid, Integer amount, HttpSession session
  • JsonResult<Void>

3處理請求

在controller包下創(chuàng)建CartController類并繼承BaseController類,在類中添加處理請求的addToCart()方法

@RestController
@RequestMapping("carts")
public class CartController extends BaseController {
    @Autowired
    private ICartService cartService;

    @RequestMapping("add_to_cart")
    public JsonResult<Void> addToCart(Integer pid, Integer amount, HttpSession session) {
        cartService.addToCart(
                getUidFromSession(session),
                pid,
                amount,
                getUsernameFromSession(session));
        return new JsonResult<Void>(OK);
    }
}

6.前端頁面

在product.html頁面中的body標(biāo)簽內(nèi)的script標(biāo)簽里為“加入購物車”按鈕添加點(diǎn)擊事件

回顧一下在ajax函數(shù)中data參數(shù)的數(shù)據(jù)設(shè)置的方式

  • data:$(“選擇的form表單”).serialize()。當(dāng)需要提交的參數(shù)過多并且在同一個(gè)表單中時(shí)使用
  • data:new FormData($(“選擇的form表單”)[0])。只適用提交文件
  • data:“username=TOM”。手動(dòng)拼接,適合參數(shù)值固定并且參數(shù)值列表有限.等同于
var user = "控件某屬性值或控件文本內(nèi)容或自己聲明的值"
data: "username="+user
  • 使用JSON格式提交數(shù)據(jù)
data: {
    "username": "Tom",
    "age": 18
}
  • 使用RestFul風(fēng)格不屬于前端給后端傳參數(shù)

這里表單里面有很多無用參數(shù),所以不使用表單提交

$("#btn-add-to-cart").click(function() {
    $.ajax({
        url: "/carts/add_to_cart",
        type: "POST",
        data: {
            "pid": id,
            "amount": $("#num").val()
        },
        dataType: "JSON",
        success: function(json) {
            if (json.state == 200) {
                alert("增加成功!");
            } else {
                alert("增加失??!" + json.message);
            }
        },
        error: function(xhr) {
            alert("您的登錄信息已經(jīng)過期,請重新登錄!HTTP響應(yīng)碼:" + xhr.status);
            location.href = "login.html";
        }
    });
});

點(diǎn)擊"加入購物車"按鈕后頁面跳轉(zhuǎn)的實(shí)現(xiàn):product.html導(dǎo)入的product.js文件里面實(shí)現(xiàn)了點(diǎn)擊后跳轉(zhuǎn)文章來源地址http://www.zghlxwxcb.cn/news/detail-707758.html

到了這里,關(guān)于SpringBoot項(xiàng)目--電腦商城【加入購物車】的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 微信小程序?qū)崿F(xiàn)商品加入購物車案例

    微信小程序?qū)崿F(xiàn)商品加入購物車案例

    思考: 購物車中的數(shù)據(jù)保存在哪里?用哪種數(shù)據(jù)結(jié)構(gòu)進(jìn)行保存? 小程序中可能有多個(gè)頁面需要對購物車中的數(shù)據(jù)進(jìn)行操作,因此我們想到把數(shù)據(jù)存到全局中。可以使用 wx.setStorageSync() 儲存,用 wx.getStorageSync() 進(jìn)行獲取,以數(shù)組格式方便對數(shù)據(jù)進(jìn)行操作。 一、商品加入購物車

    2024年02月10日
    瀏覽(19)
  • 微信電商小程序購買/加入購物車組件設(shè)計(jì)

    微信電商小程序購買/加入購物車組件設(shè)計(jì)

    作為一名常常擺爛,一蹶不振的大學(xué)生,最近接到了開發(fā)電商小程序的小任務(wù),既然是電商,總得有購買加車功能吧?經(jīng)過n個(gè)坤年的拜讀微信小程序開發(fā)者文檔還有別的大佬的指點(diǎn),奉上我自己的理解,歡迎各位大佬指點(diǎn)改正,學(xué)習(xí)交流,共同進(jìn)步。該文章適合微信小程序初

    2024年02月09日
    瀏覽(17)
  • 商城小程序(8.購物車頁面)

    商城小程序(8.購物車頁面)

    本章主要完成pages下的cart購物頁面編寫 定義如下UI結(jié)構(gòu) 美化樣式 通過 mapState 輔助函數(shù),將Store中的cart數(shù)組映射到當(dāng)前頁面中使用: 在UI結(jié)構(gòu)中,通過v-for渲染自定義組件my-goods 打開my-goods.vue組件,為商品左側(cè)圖片區(qū)域添加radio足跡 并美化UI ,使radio組件和image組件左右布局

    2024年01月23日
    瀏覽(20)
  • 實(shí)現(xiàn)蛋糕商城購物車功能代碼實(shí)現(xiàn)實(shí)驗(yàn)報(bào)告

    一、實(shí)驗(yàn)?zāi)康?1、熟悉HttpSession接口中常用方法 2、熟悉Session 對象的生命周期 3、熟悉兩種方法返回與當(dāng)前請求相關(guān)的HttpSession對象。 4、學(xué)會如何使用Session 技術(shù)模擬用戶登錄的功能 二、實(shí)驗(yàn)內(nèi)容 實(shí)現(xiàn)購物車 1、在chapler05 項(xiàng)目下新建一個(gè)名稱為 cn.itcast.session.entity 的包,在該

    2024年02月09日
    瀏覽(41)
  • maui sqlite開發(fā)一個(gè)商城加購物車的演示(3)
  • 前端Vue仿京東加入購物車彈框立即購買彈框shopDialog自定義彈框內(nèi)容

    前端Vue仿京東加入購物車彈框立即購買彈框shopDialog自定義彈框內(nèi)容

    前端Vue仿京東加入購物車彈框立即購買彈框shopDialog自定義彈框內(nèi)容, 下載完整代碼請?jiān)L問uni-app插件市場地址:https://ext.dcloud.net.cn/plugin?id=13183 效果圖如下: 使用方法 使用注意: 該插件需引用cc-radioBtnBox插件和cc-numbox插件兩個(gè)插件庫 cc-radioBtnBox插件地址:https://ext.dcloud.net

    2024年02月10日
    瀏覽(47)
  • 微信小程序商城開發(fā)-商品詳情頁跳轉(zhuǎn)購物車

    微信小程序商城開發(fā)-商品詳情頁跳轉(zhuǎn)購物車

    微信小程序商城開發(fā)中商品詳情頁中購物車頁面的跳轉(zhuǎn)(僅限于tabbar頁面的跳轉(zhuǎn)) ? 點(diǎn)擊商品詳情頁中的購物車圖標(biāo)跳轉(zhuǎn)不到tabbar及導(dǎo)航欄中的購物車頁面,總是報(bào)錯(cuò) 微信小程序開發(fā)需要跳轉(zhuǎn)tabbar頁面的話,有固定的跳轉(zhuǎn)方式,不是開發(fā)中所有的跳轉(zhuǎn)方式都適用于tabbar跳轉(zhuǎn)

    2024年02月17日
    瀏覽(24)
  • 谷粒商城篇章8 ---- P236-P247 ---- 購物車【分布式高級篇五】

    谷粒商城篇章8 ---- P236-P247 ---- 購物車【分布式高級篇五】

    目錄 1 環(huán)境搭建 1.1 新建購物車服務(wù)模塊gulimall-cart 1.2 購物車服務(wù)相關(guān)配置 1.2.1 pom.xml? 1.2.2 yml配置 1.2.2.1 application.yml配置 1.2.2.2 bootstrap.yml配置 1.2.3 主類 1.3 SwitchHosts增加配置 1.4 網(wǎng)關(guān)配置 1.5 整合SpringSession 1.5.1 session數(shù)據(jù)存儲在redis 1.5.2 開啟SpringSession 1.6?購物車頁面搭建 2 購

    2024年02月01日
    瀏覽(54)
  • Vue項(xiàng)目商品購物車前端本地緩存邏輯(適用H5/ipad/PC端)——前端實(shí)現(xiàn)購物車刪除商品、購物車增減數(shù)量,清空購物車功能

    Vue項(xiàng)目商品購物車前端本地緩存邏輯(適用H5/ipad/PC端)——前端實(shí)現(xiàn)購物車刪除商品、購物車增減數(shù)量,清空購物車功能

    Vue3 + Vite + Ts開源后臺管理系統(tǒng)模板 基于ElementUi或AntdUI再次封裝基礎(chǔ)組件文檔 基于Element-plus再次封裝基礎(chǔ)組件文檔(vue3+ts)

    2024年02月12日
    瀏覽(31)
  • Vue項(xiàng)目(購物車)

    目錄 購物車效果展示: 購物車代碼: 購物車效果展示: 此項(xiàng)目添加、修改、刪除數(shù)據(jù)的地方都寫了瀏覽器都會把它存儲起來 下次運(yùn)行項(xiàng)目時(shí)會把瀏覽器數(shù)據(jù)拿出來并在頁面展示 Video_20230816145047 購物車代碼: 復(fù)制完代碼,需改下script中引入的vue文件地址; 可直接使用

    2024年02月12日
    瀏覽(24)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包