使用文件创建
在src下建个sql文件夹,下面存放schema.sql文件
在这里有个坑:前面字段不是引号,后面的注释是单引号,这样在命令行执行才不会报错。
CREATE TABLE killone(
`kill_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 (kill_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 killone(name,number,start_time,end_time) VALUES
('一元秒杀鸡蛋10个',100,'2017-05-21 00:00:00','2017-05-22 00:00:00'),
('100元秒杀鸡iphone8',200,'2017-05-21 00:00:00','2017-05-22 00:00:00'),
('1000元秒杀小明',100,'2017-05-21 00:00:00','2017-05-22 00:00:00'),
('一元秒杀洗发露',1000,'2017-05-21 00:00:00','2017-05-22 00:00:00')
--秒杀成功明细记录
CREATE TABLE success_killed (
`kill_id` bigint not NULL comment '秒杀商品id',
`user_phone` bigint NOT NULL comment '用户手机号',
`state` tinyint NOT NULL DEFAULT -1 comment '状态:-1:无效,0:成功,1:已付款',
`create_time` TIMESTAMP NOT NULL comment '创建时间',
PRIMARY KEY (kill_id,user_phone) /*联合主键*/,
KEY idx_create_time(create_time)
)ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '秒杀成功明细表'
然后查看一下:
MariaDB [killone]> show create table success_killed\G;
*************************** 1. row ***************************
Table: success_killed
Create Table: CREATE TABLE `success_killed` (
`kill_id` bigint(20) NOT NULL COMMENT '秒杀商品id',
`user_phone` bigint(20) NOT NULL COMMENT '用户手机号',
`state` tinyint(4) NOT NULL DEFAULT '-1' COMMENT '状态:-1:无效,0:成功,1:已付款',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`kill_id`,`user_phone`),
KEY `idx_create_time` (`create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='秒杀成功明细表'
相应的实体对象
package com.jimo.entity;
import java.util.Date;
/**
* Created by root on 17-5-21.
*/
public class KillOne {
private long killId;
private String name;
private int number;
private Date startTime;
private Date endTime;
private Date createTime;
public long getKillId() {
return killId;
}
public void setKillId(long killId) {
this.killId = killId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public Date getStartTime() {
return startTime;
}
public void setStartTime(Date startTime) {
this.startTime = startTime;
}
public Date getEndTime() {
return endTime;
}
public void setEndTime(Date endTime) {
this.endTime = endTime;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "KillOne{" +
"killId=" + killId +
", name='" + name + '\'' +
", number=" + number +
", startTime=" + startTime +
", endTime=" + endTime +
", createTime=" + createTime +
'}';
}
}
package com.jimo.entity;
import java.util.Date;
/**
* Created by root on 17-5-21.
*/
public class SuccessKilled {
private long killId;
private long userPhone;
private short state;
private Date createTime;
/*多对一关系*/
private KillOne killOne;
@Override
public String toString() {
return "SuccessKilled{" +
"killId=" + killId +
", userPhone=" + userPhone +
", state=" + state +
", createTime=" + createTime +
", killOne=" + killOne +
'}';
}
public long getKillId() {
return killId;
}
public void setKillId(long killId) {
this.killId = killId;
}
public long getUserPhone() {
return userPhone;
}
public void setUserPhone(long userPhone) {
this.userPhone = userPhone;
}
public short getState() {
return state;
}
public void setState(short state) {
this.state = state;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
public KillOne getKillOne() {
return killOne;
}
public void setKillOne(KillOne killOne) {
this.killOne = killOne;
}
}
dao层接口
package com.jimo.dao;
import com.jimo.entity.KillOne;
import java.util.Date;
import java.util.List;
/**
* Created by root on 17-5-21.
*/
public interface KillOneDao {
/**
* 减库存
*
* @param killId
* @param killTime
* @return
*/
public int reduceNumber(long killId, Date killTime);
/**
* 查询秒杀对象
*
* @param killId
* @return
*/
public KillOne queryById(long killId);
/**
* 根据偏移量查询列表
*
* @param offset
* @param limit
* @return
*/
public List<KillOne> queryAll(int offset, int limit);
}
package com.jimo.dao;
import com.jimo.entity.SuccessKilled;
/**
* Created by root on 17-5-21.
*/
public interface SuccessKilledDao {
/**
* 插入成功明细,可过滤重复
*
* @param killId
* @param userPhone
* @return
*/
public int insertSuccessKilled(long killId, long userPhone);
/**
* 根据id查询成功明细并携带商品对象
*
* @param killId
* @return
*/
public SuccessKilled queryByIdWithKillOne(long killId);
}