Java高并发秒杀API之业务分析与DAO层

搭建工程

创建项目和依赖

创建项目

官方地址:
logback配置:
https://logback.qos.ch/manual/configuration.html
spring配置:
https://docs.spring.io/spring/docs/
mybatis配置:
http://www.mybatis.org/mybatis-3/zh/index.html

maven命令创建web骨架项目

mvn archetype:generate -DarchetypeCatalog=internal -DgroupId=org.seckill -DartifactId=seckill -DarchetypeArtifactId=maven-archetype-webapp

用idea加载pom.xml文件加载maven web项目

修改servlet版本为3.1:
拷贝Tomcat中web项目的web.xml头文件到webapp/web.xml中

把web项目没有的补全:
project structor->Modules,找到项目补全


这里写图片描述

项目依赖


  
    
    junit
    junit
    4.11
    test
  
  
  
  
    org.slf4j
    slf4j-api
    1.7.12
  
  
    ch.qos.logback
    logback-core
    1.1.1
  
  
  
    ch.qos.logback
    logback-classic
    1.1.1
    test
  
  
  
    mysql
    mysql-connector-java
    5.1.35
    runtime
  
  
  
    c3p0
    c3p0
    0.9.1.2
  
  
  
    org.mybatis
    mybatis
    3.3.0
  
  
  
    org.mybatis
    mybatis-spring
    1.2.3
  
  
  
    taglibs
    standard
    1.1.2
  
  
    jstl
    jstl
    1.2
  
  
    com.fasterxml.jackson.core
    jackson-databind
    2.5.4
  
  
    javax.servlet
    javax.servlet-api
    3.1.0
    provided
  
  
  
  
    org.springframework
    spring-core
    4.1.7.RELEASE
  
  
    org.springframework
    spring-beans
    4.1.7.RELEASE
  
  
    org.springframework
    spring-context
    4.1.7.RELEASE
  
  
  
    org.springframework
    spring-jdbc
    4.1.7.RELEASE
  
  
    org.springframework
    spring-tx
    4.1.7.RELEASE
  
  
  
    org.springframework
    spring-web
    4.1.7.RELEASE
  
  
    org.springframework
    spring-webmvc
    4.1.7.RELEASE
  
  
  
    org.springframework
    spring-test
    4.1.7.RELEASE
    test
  

秒杀业务分析

秒杀业务分析

这里写图片描述

DAO层设计与开发

数据库设计与编码

-- 数据库初始化脚本

-- 创建数据库
CREATE DATABASE seckill;
-- 使用数据库
use seckill;
-- 创建秒杀库存表
CREATE TABLE seckill(
  `seckill_id` bigint NOT NULL AUTO_INCREMENT COMMENT '商品库存id',
  `name` VARCHAR (120) NOT NULL COMMENT '商品名称',
  `number` INT NOT NULL COMMENT '库存数量',
  `start_time` TIMESTAMP NOT NULL COMMENT '秒杀开启时间',
  `end_time` TIMESTAMP NOT NULL COMMENT '秒杀结束时间',
  `create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  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='秒杀库存表';

--  初始化数据
INSERT INTO
  seckill(name,number,start_time,end_time)
VALUE
  ('1000元秒杀iphone6',100,'2015-11-01 00:00:00','2015-11-02 00:00:00'),
  ('500元秒杀ipad2',200,'2015-11-01 00:00:00','2015-11-02 00:00:00'),
  ('300元秒杀小米4',300,'2015-11-01 00:00:00','2015-11-02 00:00:00'),
  ('200元秒杀红米note',400,'2015-11-01 00:00:00','2015-11-02 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 '状态标识:-1:无效 0:成功 1:已付款 2:已发货',
  `create_time` TIMESTAMP NOT NULL COMMENT '创建时间',
  PRIMARY KEY (seckill_id,user_phone),/*联合主键*/
  KEY idx_create_time(create_time)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表';

-- 连接数据库控制台
mysql -uroot -p

-- 查看表结构
show tables;

-- 查看表是怎么创建的以及注释是什么
show create table seckill\G

-- 查看表数据
select * from seckill;
select * from success_killed;

DAO实体和接口编码

你可能感兴趣的:(Java高并发秒杀API之业务分析与DAO层)