-
int類型參數(shù)無法保存形參會變成arg0代替
查看全部 -
秒殺接口暴露可以防止提前記錄接口后由插件程序自動填寫參數(shù)執(zhí)行秒殺
查看全部 -
update語句的行級鎖說明
查看全部 -
有多個參數(shù)的時候,要告訴 Mybatis 哪個位置的參數(shù)必須叫什麼名字
補上 @Param查看全部 -
投影片~~~~~~~~~~~~~
DAO接口實現(xiàn)類 mapper查看全部 -
有個技巧,如果出現(xiàn)重複,這 insert into 會報錯
我們可以忽略錯誤 insert ignore into ...
有兩種實現(xiàn)
1.分兩個SQL來完成
2. 一個SQL完成查看全部 -
mybatis-config.xml
SeckKillDao.xml查看全部 -
投影片~~~~~~~
查看全部 -
防止用戶重複秒殺,基於這唯一性可以為我們過濾
success_killed 的 primary key
show tables;
show create table seckill\G => 可以看這表示如何創(chuàng)建的 (DDL)
=========--?數(shù)據(jù)庫初始化腳本 --?創(chuàng)建數(shù)據(jù)庫 CREATE?DATABASE?seckill; --?使用數(shù)據(jù)庫 USE?seckill; --?創(chuàng)建秒殺庫存表 CREATE?TABLE?seckill?( ????`seckill_id`?bigint?NOT?NULL?AUTO_INCREMENT?COMMENT?'商品庫存id', ????`name`?varchar(120)?NOT?NULL?COMMENT?'商品名稱', ????`number`?int?NOT?NULL?COMMENT?'庫存數(shù)量', ????`start_time`?timestamp?NOT?NULL?COMMENT?'秒殺開啟時間', ????`end_time`?timestamp?NOT?NULL?COMMENT?'秒殺結(jié)束時間', ????`create_time`?timestamp?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?COMMENT?'創(chuàng)建時間', ????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="秒殺庫存表"; --?初始化數(shù)據(jù) 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?'狀態(tài)標志:-1:無效?0:成功?1:已付款', ????`create_time`?timestamp?NOT?NULL?DEFAULT?CURRENT_TIMESTAMP?COMMENT?'創(chuàng)建時間', ????PRIMARY?KEY?(seckill_id,?user_phone), ????KEY?idx_create_time?(create_time) )?ENGINE?=?InnoDB?DEFAULT?CHARSET=utf8?COMMENT='秒殺成功明細表'; --?連接數(shù)據(jù)庫控制臺 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
查看全部 -
投影片~~~~~~~~~~
這麼複雜?
我們只實現(xiàn)秒殺相關(guān)功能。查看全部 -
投影片~~~~~~~
競爭是發(fā)生在 Update 扣庫存數(shù)查看全部 -
投影片~~~~~
為什麼需要事務(wù)查看全部 -
maven 命令創(chuàng)建 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"> ????????<!--當出現(xiàn)主鍵沖突(即重復(fù)秒殺),報錯,如果不想讓程序報錯,加入ignore--> ????????Insert?ignore?INTO?success_killed(seckill_id,user_phone,state,) ????????VALUES(#{seckillId},#{userPhone},0) ????</insert> ????<select?id="queryByIdWithSeckill"?resultType="cn.dangkei.entity.SuccessKilled"> ????????<!--根據(jù)seckillId查詢SuceessKilled對象,并攜帶Seckill對象--> ????????<!--如何告訴mybatis把結(jié)果映射到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創(chuàng)建的最后一個參數(shù)表示使用mvn的原型
webapp的原型來創(chuàng)建項目
查看全部 -
用Maven命令創(chuàng)建web項目
查看全部 -
MyBatis和HIBERNATE都是用來ORM映射的
MyBatis的特點:參數(shù) + SQL = Entity/List (提供參數(shù)和SQL語句)
兩種方式提供SQL:1、XML提供SQL (推薦)? 2、注解提供SQL
如何DAO接口?
1、Mapper自動實現(xiàn)DAO接口 (推薦)
2、API編程方式實現(xiàn)DAO接口
查看全部 -
減庫存和記錄購買明細構(gòu)成一個事務(wù),事務(wù)機制依然是目前最可靠的落地方案
NoSQL對于事務(wù)的支持不是很好
查看全部 -
目錄結(jié)構(gòu)
查看全部 -
?mapper寫法
查看全部 -
配置全局屬性:
使用jdbc的getGeneratedKeys 獲取數(shù)據(jù)庫自增主鍵
使用列別名替代列名,自動轉(zhuǎn)換為entity里的屬性 useColumnLabel
開啟駝峰命名轉(zhuǎn)換 mapUnderscoreCamelCase
查看全部 -
ctrl+shift+t 生成測試類
查看全部 -
spring官網(wǎng)文檔:
https://docs.spring.io/spring-framework/docs/
查看全部 -
更少的配置--別名
查看全部
舉報