基于SSM实现高并发秒杀Web项目(一)

看到公众号有挺多学习后台开发的朋友,所以我这几天写了几篇博客,是基于SSM框架实现的高并发秒杀系统,参考了网上的视频自己实现的,这里分享给大家,难度不太大,适合有一些开发基础的朋友学习,我记录了比较详细的步骤和代码,一共分为了四个部分,我争取每天更新一期,感兴趣的可以看一下。

整合运用SSM框架,做一个基于Spring+SpringMVC+Mybatis实现的高并发秒杀项目,后面采用redis缓存来优化高并发。学习秒杀类系统需求理解和实现以及解决高并发问题的常用技术。

第一部分写一下业务分析已经DAO层的设计与实现。

一、相关技术及开发环境

①Mysql:

进行表设计

常用SQL技巧

事务和行级锁

②MyBatis:

DAO层设计与开发

Mybatis的合理使用

Mybatis与Spring整合

③Spring:

SpringIOC整合Service

声明式事务的运用

④SpringMVC:

Restful接口的设计与使用

框架的运作流程

Controller开发技巧

⑤前端:

交互设计

Bootstrap

jQuery

Ajax

⑥高并发

高并发点和高并发分析

优化思路并实现

开发环境:

Ubuntu16.04+IntelliJIDEA+jdk1.8+Mysql+redis-4.0.9

二、秒杀系统业务分析及难点分析

①秒杀系统的业务流程如下:

可以从图中看到,秒杀系统的业务核心就是对库存的处理。

②用户针对库存的业务分析如下:

因此要实现对库存的处理,关键就要记录秒杀成功的信息,即用户的购买行为。购买行为就是指 谁购买成功了;成功的时间/有效期;付款/发货信息。

③MySQL实现秒杀难点分析

秒杀系统要解决的难点问题其实就是“竞争”的问题,即多个用户同时争夺物品。

这个“竞争”反映到MySQL中就是事务加行级锁,在后面的实现中会逐一介绍。

三、DAO层设计与开发

首先使用IDEA构建一个Maven项目,引入相关的依赖,具体的依赖可以在pom.xml文件中查看。

1)数据库设计

①创建秒杀库存表

②初始化库存数据

③创建秒杀成功明细表,用于记录谁秒杀成功了以及时间

2)DAO实体及接口定义

①根据所创建的数据库表,定义出相应的实体类与数据查询接口。

新建entity包,里面新建Seckill类和SuccessKilled类,属性与对应的数据表一致,getter()、setter()方法等。

②新建dao包,里面新建SeckillDao接口,定义秒杀商品所需要的方法

③dao包下新建SuccessKillDao接口,定义秒杀成功所需要的方法

3)基于Mybatis实现DAO接口

Mybatis实现接口有两种方式:一是通过Mapper会自动实现DAO接口,二是可以通过API编程方式来实现DAO接口。

我们这里采用第一种方式,减少代码量。

①resources目录下新建mybatis-config.xml文件,用于配置mybatis的相关属性。

②resources目录下新建mapper目录,用于配置相关的映射文件。

新建SeckillDao.xml如下:

新建SuccessKillDao.xml如下:

4)Mybatis整合Spring

①resources目录下新建jdbc.properties文件,用于配置数据库信息

②resources目录下新建spring 目录,里面新建spring-dao.xml文件,用于向Spring IOC中装配dao层所需要的bean,包括数据库连接池、Mybatis的SqlsessionFactory对象,以及扫描DAO接口实现类并注入进IOC

5)DAO层单元测试

接下来就对SecKillDao和SuccessKillDao接口层进行测试。

①首先在SecKillDao类中使用idea的快捷键“shift+ctrl+t”快速生成测试类,注意选用jUnit4。

编写测试代码如下:

逐个测试每个方法,均验证通过。

②同理验证SuccessKillDao接口,测试类如下:

逐个测试每个方法,均验证通过。

6)DAO层小结

到此,秒杀项目的DAO层已经实现完成,由于采用了MybatisORM框架,DAO层工作演变为:接口设计+SQL编写。代码和SQL分离,方便后期review。

并且DAO层只实现相关数据库的增删改查基本功能,具体的DAO拼接等复杂逻辑会在下一部分的Service层完成。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180529G1QQHD00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励