美文网首页
Java高并发秒杀API之业务分析与DAO层

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

作者: amoscxy | 来源:发表于2018-02-06 00:40 被阅读0次

    搭建工程

    创建项目和依赖

    创建项目

    官方地址:
    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,找到项目补全


    这里写图片描述

    项目依赖

    <dependencies>
      <dependency>
        <!-- 使用junit4 -->
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
        <scope>test</scope>
      </dependency>
      <!-- 补全项目依赖 -->
      <!-- 1:日志 java日志:slf4j,log4j,logback,common-logging
          slf4j 是规范/接口
          日志实现:log4j,logback,common-logging
          使用:slf4j + logback
       -->
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.12</version>
      </dependency>
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-core</artifactId>
        <version>1.1.1</version>
      </dependency>
      <!-- 实现slf4j接口并整合 -->
      <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.1.1</version>
        <scope>test</scope>
      </dependency>
      <!-- 2.数据库相关依赖 -->
      <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.35</version>
        <scope>runtime</scope>
      </dependency>
      <!-- 数据库连接池 -->
      <dependency>
        <groupId>c3p0</groupId>
        <artifactId>c3p0</artifactId>
        <version>0.9.1.2</version>
      </dependency>
      <!-- DAO框架:MyBatis依赖 -->
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.3.0</version>
      </dependency>
      <!-- mybatis自身实现的spring整合依赖 -->
      <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis-spring</artifactId>
        <version>1.2.3</version>
      </dependency>
      <!-- 3.Servlet web相关依赖 -->
      <dependency>
        <groupId>taglibs</groupId>
        <artifactId>standard</artifactId>
        <version>1.1.2</version>
      </dependency>
      <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.2</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.5.4</version>
      </dependency>
      <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
      </dependency>
      <!-- 4.spring依赖 -->
      <!-- 4.1.spring核心依赖 -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>4.1.7.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>4.1.7.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>4.1.7.RELEASE</version>
      </dependency>
      <!-- 4.2.spring dao层的依赖 -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>4.1.7.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>4.1.7.RELEASE</version>
      </dependency>
      <!-- 4.3.spring web相关依赖 -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-web</artifactId>
        <version>4.1.7.RELEASE</version>
      </dependency>
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>4.1.7.RELEASE</version>
      </dependency>
      <!-- 4.4.spring test相关依赖 -->
      <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>4.1.7.RELEASE</version>
        <scope>test</scope>
      </dependency>
    </dependencies>
    

    秒杀业务分析

    秒杀业务分析

    这里写图片描述

    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层

          本文链接:https://www.haomeiwen.com/subject/ivtwzxtx.html