# seckill
SSM(spring+spring_mybatis)实现高并发秒杀系统,包含详细笔记
## 1、整体业务分析
1)展示商品所有列表;
![image-20200402170951943](assets/image-20200402170951943.png)
2)点击链接进入商品详情页;
## ![image-20200402170653798](assets/image-20200402170653798.png)
![image-20200402171017154](assets/image-20200402171017154.png)
![image-20200402171044948](assets/image-20200402171044948.png)
![image-20200402171101994](assets/image-20200402171101994.png)
## 2、DAO层设计与开发
### 2.1 Mysql&&NoSQL
关系型数据库(Mysql/Oracle/SqlServer等)和非关系型数据库(HBase/redis/mongoDB/Neo4j等)。
关系型和非关系型数据库的主要差异是数据存储的方式,关系型数据天然就是表格式的,非关系型数据是基于键值对的,通常存储在数据集中,就像文档、键值对或者图结构,所有非关系型数据存储天然就是分布式的,其真正的价值在操作的扩展性和大数据量处理。
SQL数据库支持对事务原子性细粒度控制,并且易于回滚事务,其在事务性操作上性能和稳定性比NoSQL好很多。并且目前事务机制是目前最可靠的落地方案。
### 2.2 Mysql实现秒杀业务的难点
当多个用户同时参与到秒杀活动时,会出现“竞争”,对于Mysql来说难点在于"事务+行级锁"
`start transaction`
`update 库存数量`**(出现竞争,行级锁:一条事务执行,其余事务全部在等待,直到commit)**
`insert 购买明细`
`Commit`
*<u>该问题在高并发部分解决!</u>*
### 2.3 数据库设计
将DDL(数据库定义语言)卸载了“/sql/sechema.sql”文件中,再对数据库进行操作。
建立一个seckill数据库,2张表:seckill、success_killed
### 2.4 Mybatis实现DAO理论
Mybatis主要特点在于:参数 + SQL = Entity/List
Mybatis在哪些SQL:XML提供SQL
Mybaits如何实现接口: Mapper自动实现DAO接口, 通过Dao找Mapper文件下的同名的SQL语句,一个Dao对 应一个Mapper
### 2.5 Mybatis整合Spring理论
整合目标:更少的编码(只写接口不写实现类);
更少的配置(1、使用别名,通过org.seckill.entity包扫描将 org.seckill.entity.Seckill—>Seckill
2、配置扫描,扫描sql配置文件:mapper需要的xml文件
3、dao的实现,自动实现dao接口,自动注入spring容器);
足够的灵活性(可以自己定义SQL语句、可以自由的通过表达式传递参数,最终实现结果集自动赋 值。)
### 2.6 DAO实体/接口设计以及基于Mybatis实现
(1)配置Mybatis全局属性"resources/mybatis-config.xml"。
(2)**将数据库中的表——>Java中entity实体(org.seckill.entity),将表中的列与实体类中的属性一一对应**
如果业务逻辑中出现**多对一**的情况,需要在多方的实体类中定义一方的实体类。在秒杀系统中多个成功秒杀的实体对应的是同一个秒杀对象实体,所在在SuccessKilled类中定义Seckill实体类:private Seckill seckill。
(3)实体类对应的接口设计,常用的是实体下的增删改查操作。(**org.seckill.dao**)
(4)为DAO接口的方法提供SQL语句:"resources/mapper/*.xml",namespace对应文件路径,id对应方法名,resultType对应返回值类型,parameterType对应参数类型,当出现多个参数的时候,接口方法中需要对参数进行注解,比如(@Param("seckillId") long seckillId, @Param("killTime")Date killTime)。
(5)Spring整合Mybatis,相关文件“resources/jdbc.properties”和“resources/spring/spring-dao”
配置数据库相关参数“resources/jdbc.properties”、 数据库池连接、**配置sqlSessionFactory对象**、配置扫描Dao接口包,动态实现Dao接口,注入到spring容器中
## 3、Service层开发
### 3.1 秒杀Service接口设计
(1)业务接口要站在使用者的角度设置接口。
从三个方面入手:方法定义的粒度(从用户操作的角度入手,一般每个button都会对应一个方法)、参数(越简练越好)、返回类型(return 类型/异常)。
(2)service需要的package
service包:用来存放service接口及其实现类"./service/Impl/SeckillServiceImpl";
exception包:存放service接口所需要的一些异常,比如重复秒杀、秒杀结束、内部错误等;
dto包:数据传输包 ,存放一个service和web之前的数据传递。
### 3.2 Spring IOC整合Service
Spring会通过对象工厂和依赖管理实现一个一致性的访问接口。
IOC的优点:对象创建统一托管、规范的生命周期管理、灵活的依赖注入、一致的获取对象(从容器中一致获取) 。
Spring IOC 的注入方式:XML(用bean来实现第三方类库,如DataSource, 需要命名空间配置,如context、aop、mvc等),注解(项目中自身开发使用的类,可以在代码中使用注解,如@Service @Controller等)、java配置类(自定义修改类库,不建议)。
本项目中IOC使用:XML配置——>package-scan包扫描(**扫描service包下所有使用注解的类型,这些类由Spring统一托管,不需要新建而是自动加载对象的实例到Spring 容器中**)——>Annotation注解(默认使用注解来管理事务行为)
### ![image-20200402142114095](assets/image-20200402142114095.png)
### 3.3 声明式事务运用
对事务的处理交由Spring进行统一的管理,当你的业务方法不发生异常(或者发生异常,但该异常也被配置信息允许提交事务)时,Spring就会让事务管理器提交事务,而发生异常(并且该异常不被你的配置信息所允许提交事务)时,则让事务管理器回滚事务。
注意try..catch..中的异常,Spring 可能感知不到。
采用注解的方式实现声明式事务@Transactional
```
使用注解控制事务方法的优点:
1、开发团队达成一直约定,约定明确标注事务方法的编程风格。
2、保证事务方法的执行时间尽可能短,不要穿插其他的网络操作(RPC/HTTP请求),或者剥离/封装到方法外面。
3、不是所有的方法都需要事务,如只有一条修改操作、只读操作。
```
## 4、Web层开发
### 4.1 Restful接口设计与使用
一种优雅的URI表达方式、能表示资源的状态(名词)和状态的转移。
GET用于查询操作,POST用于添加和修改操作,PUT用于修改操作,DELETE用于删除操作
URL设计:/模块/资源/{标志}/集合1/... 如:/user/{uid}/friends 好友列表
![image-20200402150122102](assets/image-20200402150122102.png)
### 4.2 Spring MVC 框架运作流程
#### 4.2.1 Spring MVC理论
![image-20200402150528468](assets/image-20200402150528468.png)
返回一个页面
```java
@RequestMapping(value = "/{seckillId}/detail", method = RequestMethod.GET)
public String detail(@PathVariable("seckillId") Long seckillId, Model model) {
if (null == seckillId) {
return "redirect:/seckill/list";
}
Seckill seckill = seckillService.getById(seckillId);
if (null == seckill) {
return "forward:/seckill/list";
}
model.addAttribute("seckill", seckill);//承载最终要返回给用户的数据,返回Seckill类数据
return "detail";//view,在spring-web1里面配置
}
```
返回一个json(**现在大部分开发使用的方法**)
```java
@RequestMapping(value = "/{seckillId}/exposer",
method = {RequestMethod.POST,RequestMethod.GET},
produces = {"application/json;charset=utf-8"})
@ResponseBody //最后数据会封装成一个json,返回json数据
public SeckillResult<Exposer> ex
没有合适的资源?快使用搜索试试~ 我知道了~
毕业设计&课设-毕设项目:基于spring+mybatis实现高并发秒杀系统,包含详细笔记.zip
共104个文件
xml:34个
java:19个
png:14个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 33 浏览量
2024-06-10
09:01:40
上传
评论
收藏 4.11MB ZIP 举报
温馨提示
该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。 该资源内项目源码是个人的课程设计,代码都测试ok,都是运行成功后才上传资源,答辩评审平均分达到96分,放心下载使用! ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
资源推荐
资源详情
资源评论
收起资源包目录
毕业设计&课设-毕设项目:基于spring+mybatis实现高并发秒杀系统,包含详细笔记.zip (104个子文件)
$CACHE_FILE$ 1KB
$PRODUCT_WORKSPACE_FILE$ 2KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.DS_Store 6KB
.gitattributes 66B
.gitignore 278B
seckill.iml 80B
SeckillServiceImpl.java 6KB
SeckillServiceTest.java 5KB
SeckillController.java 4KB
RedisDao.java 2KB
Exposer.java 2KB
SeckillDaoTest.java 2KB
SeckillExcution.java 2KB
Seckill.java 1KB
SeckillService.java 1KB
SuccessKilledDaoTest.java 1KB
SuccessKilled.java 1KB
RedisDaoTest.java 1KB
SeckillResult.java 996B
SeckillDao.java 889B
SeckillStatEnum.java 874B
SuccessKilledDao.java 651B
RepeatKillException.java 402B
SeckillCloseException.java 388B
SeckillException.java 351B
seckill.js 6KB
seckill.js 6KB
seckill.js 6KB
seckill.js 6KB
detail.jsp 3KB
detail.jsp 3KB
list.jsp 2KB
list.jsp 2KB
head.jsp 807B
head.jsp 807B
tag.jsp 348B
tag.jsp 348B
index.jsp 302B
index.jsp 302B
seckill.kotlin_module 16B
seckill.kotlin_module 16B
README.md 13KB
SSM秒杀系统seckill总结.md 13KB
seckill.L2drdQ.meta 10B
MANIFEST.MF 85B
note 4KB
image-20200402150528468.png 634KB
截屏2020-04-02下午3.01.02.png 585KB
image-20200402150122102.png 521KB
image-20200402170653798.png 486KB
image-20200402142114095.png 356KB
image-20200402155652600.png 351KB
image-20200402163316458.png 339KB
image-20200402155722743.png 333KB
image-20200402164519350.png 252KB
image-20200402092537556.png 192KB
image-20200402170951943.png 192KB
image-20200402171101994.png 34KB
image-20200402171017154.png 33KB
image-20200402171044948.png 32KB
jdbc.properties 187B
jdbc.properties 187B
jdbc.properties 187B
schema.sql 2KB
seckill.sql 2KB
75662eb9-0d23-410c-9154-6b27b3dd36a9.xml 47KB
workspace.xml 20KB
uiDesigner.xml 9KB
pom.xml 7KB
spring-dao.xml 3KB
spring-dao.xml 3KB
spring-dao.xml 3KB
spring-web1.xml 2KB
spring-web1.xml 2KB
spring-web1.xml 2KB
SeckillDao.xml 1KB
SeckillDao.xml 1KB
SeckillDao.xml 1KB
SuccesskilledDao.xml 1KB
SuccesskilledDao.xml 1KB
SuccesskilledDao.xml 1KB
spring-service.xml 1KB
spring-service.xml 1KB
spring-service.xml 1KB
web.xml 1KB
web.xml 1KB
dataSources.local.xml 960B
dataSources.xml 898B
mybatis-config.xml 773B
mybatis-config.xml 773B
mybatis-config.xml 773B
misc.xml 640B
compiler.xml 528B
logback.xml 508B
logback.xml 508B
共 104 条
- 1
- 2
资源评论
毕业小助手
- 粉丝: 2762
- 资源: 5583
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C# Winform Excel 转 Chart示例视频
- uniapp-小程序-vue
- 台球检测11-YOLO(v5至v11)、COCO、CreateML、Paligemma、TFRecord、VOC数据集合集.rar
- 富芮坤FR8003作为主机连接FR8003抓包文件20241223-135206.pcapng
- 谷歌股票数据集,google股票数据集,Alphabet股份数据集(2004-2024)
- nuget 库官方下载包,可使用解压文件打开解压使用
- 非wine、原生Linux迅雷安装包deb文件,支持Ubuntu、UOS统信、深度Deepin、LinuxMint、Debain系通用
- KUKA机器人安装包,与PROFINET软件包
- 船舶燃料消耗和二氧化碳排放分析数据集,燃料消耗和碳排放关联分析数据
- req-sign、bd-ticket-ree-public加密算法(JS)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功