# 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目
![Mac OS X 10.12.4](https://img.shields.io/badge/Mac%20OS%20X-10.12.4-lightgrey.svg)
![IntelliJ IDEA](https://img.shields.io/badge/IntelliJ%20IDEA-2017.2.6-red.svg)
![Maven](https://img.shields.io/badge/Maven-4.0-ff69b4.svg)
![SSM](https://img.shields.io/badge/SSM-framework-brightgreen.svg)
![build](https://img.shields.io/badge/build-passing-brightgreen.svg)
[![MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/nnngu/nguSeckill/blob/master/LICENSE)
## 快速部署
1、clone项目到本地
2、数据库脚本放在nguSeckill项目的sql目录下,在MySQL中执行数据库脚本
3、数据库配置在nguSeckill项目的src/main/resources目录下的jdbc.properties文件中
4、在IntelliJ IDEA中运行nguSeckill项目
5、运行成功,enjoy it!
## 文档目录
**项目的文档分为如下4个部分:**
* [01 Java高并发秒杀项目之业务分析与DAO层](https://github.com/nnngu/LearningNotes/blob/master/nguSeckill/01%20Java%E9%AB%98%E5%B9%B6%E5%8F%91%E7%A7%92%E6%9D%80%E9%A1%B9%E7%9B%AE%E4%B9%8B%E4%B8%9A%E5%8A%A1%E5%88%86%E6%9E%90%E4%B8%8EDAO%E5%B1%82.md)
* [02 Java高并发秒杀项目之Service层](https://github.com/nnngu/LearningNotes/blob/master/nguSeckill/02%20Java%E9%AB%98%E5%B9%B6%E5%8F%91%E7%A7%92%E6%9D%80%E9%A1%B9%E7%9B%AE%E4%B9%8BService%E5%B1%82.md)
* [03 Java高并发秒杀项目之web层](https://github.com/nnngu/LearningNotes/blob/master/nguSeckill/03%20Java%E9%AB%98%E5%B9%B6%E5%8F%91%E7%A7%92%E6%9D%80%E9%A1%B9%E7%9B%AE%E4%B9%8Bweb%E5%B1%82.md)
* [04 Java高并发秒杀项目之高并发优化](https://github.com/nnngu/LearningNotes/blob/master/nguSeckill/04%20Java%E9%AB%98%E5%B9%B6%E5%8F%91%E7%A7%92%E6%9D%80%E9%A1%B9%E7%9B%AE%E4%B9%8B%E9%AB%98%E5%B9%B6%E5%8F%91%E4%BC%98%E5%8C%96.md)
---
# 01 Java高并发秒杀项目之业务分析与DAO层
Github:https://github.com/nnngu
项目源代码:https://github.com/nnngu/nguSeckill
---
## 项目的效果图
### 秒杀商品列表
![秒杀商品列表][1]
### 秒杀未开始(此时正在倒计时)
![秒杀未开始(此时正在倒计时)][26]
### 开始秒杀提示界面
![开始秒杀提示界面][2]
### 秒杀结束提示界面
![秒杀结束提示界面][3]
## 新建一个Maven项目
以IntelliJ IDEA为例,点击`File > New > Project > Maven`
![然后点击Next继续;][4]
然后点击Next继续;
![填写相关信息,点击Next;][5]
填写相关信息,点击Next;
![最后点击Finish,完成创建。][6]
最后点击Finish,完成创建。
如果右下角弹出下面这个提示,点击`Enable Auto-Import`
![如果弹出这个提示,点击Enable Auto-Import][7]
## 创建webapp目录
点击`File > Project Structure`
步骤1
![][8]
步骤2
![][9]
步骤3
![][10]
步骤4
![][11]
步骤5
![][12]
步骤6
![][13]
步骤7
![][14]
步骤8
![][15]
## 构建pom文件
Maven项目创建好了,接下来我们要添加一些jar包的依赖,也就是在`pom.xml`中添加各种开源组件的坐标。
```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nnngu</groupId>
<artifactId>nguSeckill</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 代码省略,请参照项目的源代码 -->
... ...
```
完整的代码,请查看项目里的`pom.xml`文件
到此,我们项目的初始化工作完成。
## 秒杀系统业务分析
**秒杀系统业务流程如下:**
![][16]
由图可以发现,整个系统其实是针对库存做的系统。用户成功秒杀商品,对于我们系统的操作就是:
1. 减库存
2. 记录用户的购买明细。下面看看我们用户对库存的业务分析:
![][17]
记录用户的秒杀成功信息,我们需要记录:1、谁购买成功了。2、购买成功的时间/有效期。3、付款/发货信息。这些数据组成了用户的秒杀成功信息,也就是用户的购买行为。
为什么我们的系统需要事务?看如下这些故障:1、若是用户成功秒杀商品我们记录了其购买明细却没有减库存。导致商品的超卖。2、减了库存却没有记录用户的购买明细。导致商品的少卖。对于上述两个故障,若是没有事务的支持,损失最大的无疑是我们的用户和商家。在MySQL中,它内置的事务机制,可以准确的帮我们完成减库存和记录用户购买明细的过程。
MySQL实现秒杀的难点分析:当用户A秒杀id为10的商品时,此时MySQL需要进行的操作是:1、开启事务。2、更新商品的库存信息。3、添加用户的购买明细,包括用户秒杀的商品id以及唯一标识用户身份的信息如电话号码等。4、提交事务。若此时有另一个用户B也在秒杀这件id为10的商品,他就需要等待,等待到用户A成功秒杀到这件商品然后MySQL成功的提交了事务他才能拿到这个id为10的商品的锁从而进行秒杀,而同一时间是不可能只有用户B在等待,肯定是有很多很多的用户都在等待拿到这个行级锁。秒杀的难点就在这里,如何高效的处理这些竞争?如何高效的完成事务?在后面第4个模块如何进行高并发的优化为大家讲解。
我们这个系统需要完成秒杀的哪些功能?先来看看天猫的一个秒杀库存系统:
![][18]
大家看了是不是觉得很复杂?当然不用担心,我们只是实现秒杀的一些功能:1、秒杀接口的暴露。2、执行秒杀的操作。3、相关查询,比如说列表查询,详情页查询。我们实现这三个功能即可。接下来进行具体的编码工作,首先是建立数据库以及Dao层的编码。
## 建立数据库
```sql
-- 创建一个数据库
CREATE DATABASE ngu_seckill;
-- 使用数据库
USE ngu_seckill;
-- 省略...
... ...
```
完整的数据库sql代码,在项目的`sql`文件夹里的`ngu_seckill.sql`
## 创建实体类
先创建秒杀商品类`com/nnngu/entity/Seckill.java`
```java
package com.nnngu.entity;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 秒杀商品
*/
public class Seckill implements Serializable {
private static final long serialVersionUID = 2912164127598660137L;
/* 主键ID*/
private long seckillId;
/* 秒杀商品名字 */
private String name;
/* 代码省略,请参照项目的源代码 */
... ...
```
创建秒杀状态类`com/nnngu/entity/SuccessKilled.java`
```java
package com.nnngu.entity;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 秒杀后的状态
*/
public class SuccessKilled implements Serializable {
private static final long serialVersionUID = 1834437127882846202L;
private long seckillId;
/* 用户的手机号码*/
private long userPhone;
/* 代码省略,请参照项目的源代码 */
... ...
```
## 为实体类创建对应的mapper接口,也就是dao接口
`com/nnngu/dao/SeckillMapper.java`
```java
package com.nnngu.dao;
import com.nnngu.entity.Seckill;
import org.apache.ibatis.annotations.Param;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
public interface SeckillMapper {
/* 代码省略,请参照项目的源代码 */
... ...
}
```
`com/nnngu/dao/SuccessKilledMapper.java`
```java
package com.nnngu.dao;
import com.nnngu.entity.SuccessKilled;
import org.apache.ibatis.annotations.Param;
public interface SuccessKilledMapper {
/* 代码省略,请参照项目的源代码 */
... ...
}
```
## 创建对应的`mapper.xml`
在`resources`目录下创建`com.nnngu.dao`包,然后创建`SeckillMapper.xml` 和 `SuccessKilledMapper.xm
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
SSM框架学习宝典:入门、进阶、精通,全方位代码项目资 一、探索SSM的无限可能 SSM(Spring + Spring MVC + MyBatis)框架作为Java开发中的黄金组合,为开发者提供了强大的技术支持和丰富的功能。本系列资料将带您从零基础开始,逐步掌握SSM的核心技术和最佳实践,助您在Java Web开发领域更上一层楼。 二、资料亮点 基础教程与练习项目:从基础知识讲起,结合实际练习项目,让您轻松上手SSM开发。 进阶技术与案例分析:针对进阶开发者,提供深入的技术探讨和案例分析,助您深入理解SSM的高级特性。 实战项目与经验分享:通过实际项目实战,让您在实践中掌握SSM的运用,同时分享经验与心得,让您少走弯路。 三、适用人群与场景 无论您是初学者还是资深开发者,无论您是在校学生还是职场人士,本系列资料都将是您学习SSM的得力助手。适用于Java Web开发、企业级应用开发、个人项目实践等多个领域。 四、使用建议 系统学习:按照资料提供的顺序进行系统学习,确保知识体系的完整性。 实践为王:在学习过程中注重实践操作,通过实际项目加深理解。 持续反馈与调整:根据学习进度和反馈,适时调整学习策略,提高学习效果。 五、安全与责任 在使用SSM框架进行开发时,请确保遵循最佳实践和安全准则,以保障系统的稳定性和安全性。在使用提供的资料时,请遵守版权法规,尊重原作者的权益。让我们共同为推动SSM技术的发展而努力!
资源推荐
资源详情
资源评论
收起资源包目录
✨ 整合IDEA+Maven+SSM框架的高并发的商品秒杀项目.zip (55个子文件)
jinpingmeichahuanggua
sql
procedure.sql 2KB
ngu_seckill.sql 2KB
pom.xml 6KB
nguSeckill.iml 5KB
src
test
java
com
nnngu
dao
SeckillMapperTest.java 1KB
service
SeckillServiceImplTest.java 3KB
main
resources
spring
applicationContext-service.xml 1KB
applicationContext-web.xml 2KB
applicationContext-dao.xml 3KB
jdbc.properties 166B
mybatis-config.xml 696B
com.nnngu.dao
SeckillMapper.xml 2KB
SuccessKilledMapper.xml 1KB
java
com
nnngu
web
SeckillController.java 4KB
dao
cache
RedisDao.java 2KB
SuccessKilledMapper.java 818B
SeckillMapper.java 1KB
service
interfaces
SeckillService.java 1KB
SeckillServiceImpl.java 8KB
enums
SeckillStatEnum.java 799B
entity
Seckill.java 2KB
SuccessKilled.java 2KB
exception
RepeatKillException.java 360B
SeckillCloseException.java 378B
SeckillException.java 320B
dto
SeckillResult.java 899B
Exposer.java 2KB
SeckillExecution.java 2KB
webapp
WEB-INF
web.xml 1KB
tags
localDataTime.tag 3KB
localData.tag 662B
jsp
list.jsp 2KB
detail.jsp 2KB
common
tag.jsp 201B
head.jsp 751B
index.jsp 52B
resources
plugins
bootstrap-3.3.0
js
bootstrap.js 66KB
npm.js 496B
bootstrap.min.js 34KB
css
bootstrap.min.css 111KB
bootstrap-theme.css.map 41KB
bootstrap-theme.css 21KB
bootstrap.css.map 358KB
bootstrap.css 134KB
bootstrap-theme.min.css 19KB
fonts
glyphicons-halflings-regular.svg 61KB
glyphicons-halflings-regular.ttf 40KB
glyphicons-halflings-regular.woff 23KB
glyphicons-halflings-regular.eot 20KB
jquery.js 95KB
jquery.cookie.min.js 1KB
jquery.countdown.min.js 5KB
script
seckill.js 6KB
LICENSE 1KB
README.md 12KB
共 55 条
- 1
资源评论
01红C
- 粉丝: 1629
- 资源: 1098
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功