功能需求:设计一个秒杀系统
初始方案
商品表设计:热销商品提供给用户秒杀,有初始库存。
@Entity
public class SecKillGoods implements Serializable{
@Id
private String id;
/**
* 剩余库存
*/
private Integer remainNum;
/**
* 秒杀商品名称
*/
private String goodsName;
}
秒杀订单表设计:记录秒杀成功的订单情况
@Entity
public class SecKillOrder implements Serializable {
@Id
@GenericGenerator(name = "PKUUID", strategy = "uuid2")
@GeneratedValue(generator = "PKUUID")
@Column(length = 36)
private String id;
//用户名称
private String consumer;
//秒杀产品编号
private String goodsId;
//购买数量
private Integer num;
}
Dao设计:主要就是一个减少库存方法,其他CRUD使用JPA自带的方法
public interface SecKillGoodsDao extends JpaRepository<SecKillGoods,String>{
@Query("update SecKillGoods g set g.remainNum = g.remainNum - ?2 where g.id=?1")
@Modifying(clearAutomatically = true)
@Transactional
int reduceStock(String id,Integer remainNum);
}
数据初始化以及提供保存订单的操作:
@Service
public class SecKillService {
@Autowired
SecKillGoodsDao secKillGoodsDao;
@Autowired
SecKillOrderDao secKillOrderDao;
/**
* 程序启动时:
* 初始化秒杀商品,清空订单数据
*/
@PostConstruct
public void initSecKillEntity(){
secKillGoodsDao.deleteAll();