看到公众号有挺多学习后台开发的朋友,所以我这几天写了几篇博客,是基于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层完成。
领取专属 10元无门槛券
私享最新 技术干货