亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java高并發秒殺API之業務分析與DAO層

  • int類型參數無法保存形參會變成arg0代替


    65a2664e0001866e09600540.jpg
    查看全部
  • 秒殺接口暴露可以防止提前記錄接口后由插件程序自動填寫參數執行秒殺


    65a212a000018c5d09600540.jpg
    查看全部
  • update語句的行級鎖說明


    65a2120d0001d7b009600540.jpg
    查看全部
  • 有多個參數的時候,要告訴 Mybatis 哪個位置的參數必須叫什麼名字

    補上 @Param

    查看全部
  • 投影片~~~~~~~~~~~~~







    DAO接口實現類 mapper


    查看全部
  • 有個技巧,如果出現重複,這 insert into 會報錯
    我們可以忽略錯誤 insert ignore into ...


    有兩種實現
    1.分兩個SQL來完成
    2. 一個SQL完成

    查看全部
  • mybatis-config.xml


    SeckKillDao.xml

    查看全部
  • 投影片~~~~~~~





    查看全部
  • 防止用戶重複秒殺,基於這唯一性可以為我們過濾
    success_killed 的 primary key

    show tables;
    show create table seckill\G => 可以看這表示如何創建的 (DDL)


    =========

    --?數據庫初始化腳本
    --?創建數據庫
    CREATE?DATABASE?seckill;
    
    --?使用數據庫
    USE?seckill;
    
    --?創建秒殺庫存表
    CREATE?TABLE?seckill?(
    ????`seckill_id`?bigint?NOT?NULL?AUTO_INCREMENT?COMMENT?'商品庫存id',
    ????`name`?varchar(120)?NOT?NULL?COMMENT?'商品名稱',
    ????`number`?int?NOT?NULL?COMMENT?'庫存數量',
    ????`start_time`?timestamp?NOT?NULL?COMMENT?'秒殺開啟時間',
    ????`end_time`?timestamp?NOT?NULL?COMMENT?'秒殺結束時間',
    ????`create_time`?timestamp?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?COMMENT?'創建時間',
    ????PRIMARY?KEY?(seckill_id),
    ????KEY?idx_start_time?(start_time),
    ????KEY?idx_end_time?(end_time),
    ????KEY?idx_create_time?(create_time)
    )?ENGINE?=?InnoDB?AUTO_INCREMENT?=?1000?DEFAULT?CHARSET=utf8?COMMENT="秒殺庫存表";
    
    --?初始化數據
    INSERT?INTO?seckill?(name,?number,?start_time,?end_time)
    VALUES
    ????('100元秒殺iPhone6',?100,?'2020-03-28?00:00:00',?'2020-03-29?00:00:00'),
    ????('100元秒殺iPhone7',?200,?'2020-03-28?00:00:00',?'2020-03-29?00:00:00'),
    ????('100元秒殺iPhone8',?300,?'2020-03-28?00:00:00',?'2020-03-29?00:00:00'),
    ????('100元秒殺iPhoneX',?400,?'2020-03-28?00:00:00',?'2020-03-29?00:00:00'),
    ????('100元秒殺iPhoneXS',?500,?'2020-03-28?00:00:00',?'2020-03-29?00:00:00');
    
    --?秒殺成功明細表
    CREATE?TABLE?success_killed?(
    ????`seckill_id`?bigint?NOT?NULL?COMMENT?'秒殺商品ID',
    ????`user_phone`?bigint?NOT?NULL?COMMENT?'用戶手機號',
    ????`state`?tinyint?NOT?NULL?DEFAULT?-1?COMMENT?'狀態標志:-1:無效?0:成功?1:已付款',
    ????`create_time`?timestamp?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?COMMENT?'創建時間',
    ????PRIMARY?KEY?(seckill_id,?user_phone),
    ????KEY?idx_create_time?(create_time)
    )?ENGINE?=?InnoDB?DEFAULT?CHARSET=utf8?COMMENT='秒殺成功明細表';
    
    --?連接數據庫控制臺
    mysql?-uroot?-p77777777
    
    --?為什么手寫DDL
    --?記錄每次的上線DDL
    --?上線V1.1
    ALTER?TABLE?seckill;
    DROP?INDEX?idx_start_time;
    
    --?上線V1.2
    INSERT?INTO?seckill?(name,?number,?start_time,?end_time)
    VALUES
    ????('100元秒殺ViVO',?100,?'2020-03-31?00:00:00',?'2020-04-01?00:00:00'),
    ????('100元秒殺ViVO',?100,?'2020-04-01?00:00:00',?'2020-04-02?00:00:00'),
    ????('100元秒殺OPPO',?200,?'2020-04-02?00:00:00',?'2020-04-03?00:00:00');
    查看全部
  • https://github.com/yoyo185644/seckill/tree/master

    查看全部
  • 投影片~~~~~~~~~~


    這麼複雜?

    我們只實現秒殺相關功能。



    查看全部
  • 投影片~~~~~~~



    競爭是發生在 Update 扣庫存數


    查看全部
  • 投影片~~~~~






    為什麼需要事務



    查看全部
    0 采集 收起 來源:秒殺業務分析

    2023-06-13

  • maven 命令創建 web 骨架項目



    web.xml 要修改成 3.1

    <?xml?version="1.0"?encoding="UTF-8"?>
    <web-app?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    ?????????xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    ?????????xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee?http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
    ?????????version="3.1">
    </web-app>



    把沒有的目錄補全
    ex: src/main/java、src/test/java、src/test/resources



    查看全部
  • ## SecKillDao.xml

    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?mapper
    ????????PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
    ????????"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper?namespace="cn.dangkei.dao.SecKillDao">
    ????<!--目的:為dao接口方法提供sql語句配置
    ????即針對dao接口中的方法編寫我們的sql語句-->
    ????<update?id="reduceNumber">
    ????????update
    ????????seckill
    ????????set
    ????????number?=?number?-1
    ????????where?seckill_id?=?#{seckillId}
    ????????AND?start_time?<![CDATA[?<=]]>?#{killTime}
    ????????AND?end_time?>=#{killTime}
    ????????AND?number?>?0
    ????</update>
    ????<select?id="queryById"?resultType="SecKill"?parameterType="long">
    ????????select?*?from?seckill?where?seckill_id?=?#{seckillId}
    ????</select>
    ????<select?id="queryAll"?resultType="SecKill">
    ????????select?*?from?seckill?ORDER?BY?create_time?DESC
    ????????limit?#{offset},#{limit}
    ????</select>
    </mapper>


    ## SuccessKilledMapper.xml

    <?xml?version="1.0"?encoding="UTF-8"?>
    <!DOCTYPE?mapper
    ????????PUBLIC?"-//mybatis.org//DTD?Config?3.0//EN"
    ????????"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper?namespace="cn.dangkei.dao.SuccessKillDao">
    ????<insert?id="insertSuccessKilled">
    ????????<!--當出現主鍵沖突(即重復秒殺),報錯,如果不想讓程序報錯,加入ignore-->
    ????????Insert?ignore?INTO?success_killed(seckill_id,user_phone,state,)
    ????????VALUES(#{seckillId},#{userPhone},0)
    ????</insert>
    ????<select?id="queryByIdWithSeckill"?resultType="cn.dangkei.entity.SuccessKilled">
    ????????<!--根據seckillId查詢SuceessKilled對象,并攜帶Seckill對象-->
    ????????<!--如何告訴mybatis把結果映射到SuccessKill屬性同時映射到secKill屬性-->
    ????????<!--可以自由控制SQL語句-->
    ????????SELECT
    ????????sk.seckill_id,
    ????????sk.user_phone,
    ????????sk.create_time,
    ????????sk.state,
    ????????s.seckill_id?"seckill.seckill_id",
    ????????s.name?"seckill.name",
    ????????s.number?"seckill.number",
    ????????s.start_time?"seckill.start_time",
    ????????s.end_time?"seckill.end_time",
    ????????s.create_time?"seckill.create_time"
    ????????FROM?success_killed?sk
    ????????INNER?JOIN?seckill?s?ON?sk.seckill_id=s.seckill_id
    ????????WHERE?sk.seckill_id=#{seckillId}?and?sk.user_phone=#{userPhone}
    ????</select>
    </mapper>
    查看全部
  • mvn創建的最后一個參數表示使用mvn的原型

    webapp的原型來創建項目

    查看全部
  • 用Maven命令創建web項目

    http://img1.sycdn.imooc.com//60d299240001345a18720766.jpg

    查看全部







  • MyBatis和HIBERNATE都是用來ORM映射的

    MyBatis的特點:參數 + SQL = Entity/List (提供參數和SQL語句)

    兩種方式提供SQL:1、XML提供SQL (推薦)? 2、注解提供SQL

    如何DAO接口?

    1、Mapper自動實現DAO接口 (推薦)

    2、API編程方式實現DAO接口

    查看全部
  • 減庫存和記錄購買明細構成一個事務,事務機制依然是目前最可靠的落地方案

    NoSQL對于事務的支持不是很好

    查看全部
    0 采集 收起 來源:秒殺業務分析

    2021-05-14

  • 目錄結構

    查看全部
  • ?mapper寫法

    查看全部
  • 配置全局屬性:

    • 使用jdbc的getGeneratedKeys 獲取數據庫自增主鍵

    • 使用列別名替代列名,自動轉換為entity里的屬性 useColumnLabel

    • 開啟駝峰命名轉換 mapUnderscoreCamelCase

    查看全部
  • ctrl+shift+t 生成測試類

    查看全部
  • spring官網文檔:

    https://docs.spring.io/spring-framework/docs/

    查看全部
  • 更少的配置--別名

    查看全部
首頁上一頁1234567下一頁尾頁

舉報

0/150
提交
取消
課程須知
《Java高并發秒殺API》是系列課程,共四門課,分別為業務分析和DAO層,Service層,Web層和高并發優化。本門課程是第一門課程,學習前需要了解如下知識: 1、精通JavaWeb基礎 2、熟悉SpringMVC、Spring和MyBatis框架
老師告訴你能學到什么?
1、掌握秒殺業務 2、能夠進行SpringMVC+Spring+MyBatis的整合開發 3、能夠進行秒殺業務DAO層的設計與實現

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!