【SpringBoot商城秒杀系统项目实战12】商品列表页

  1. 先创建商品的服务类GoodsService ,注入GoodsDao
@Service
	public class GoodsService {
	public static final String COOKIE1_NAME_TOKEN="token";	
	@Autowired
	GoodsDao goodsDao;
	@Autowired
	RedisService redisService;
	//获取商品信息列表		
	public List<GoodsVo>  getGoodsVoList() {
		return goodsDao.getGoodsVoList();
	}	
	//获取商品根据商品Id
	public GoodsVo getGoodsVoByGoodsId(long goodsId) {
		return goodsDao.getGoodsVoByGoodsId(goodsId);
	}
	//减少商品的库存
	public void reduceStock(GoodsVo goodsvo) {
		MiaoshaGoods goods=new MiaoshaGoods();
		goods.setGoodsId(goodsvo.getId());
		//goods.setStockCount(goodsvo.getGoodsStock()-1);  sql里面去运算
		//goodsDao.reduceStock(goods.getGoodsId());
		goodsDao.reduceStock(goods);
	}	
}
  1. 创建GoodsDao
    注意:这里我们查数据库的时候,不只是查找的商品的信息,我们同时想把商品的秒杀信息也一起查出来,但是这两个不同数据在两个表里面,我们就想办法封装一个GoodsVo,将两张表的数据封装到一起。

下面是GoodsVo对象,因为继承Goods,拥有Goods的所有字段
在这里插入图片描述
然后再自己定义MiaoshaGoods里面的字段,最终拼接成一个GoodsVo对象。

	//将Goods表和MiaoshaGoods表合并
	public class GoodsVo extends Goods{
	private Integer stockCount;
	private Date startDate;
	private Date endDate;
	private Double miaoshaPrice;
	
	
	public Double getMiaoshaPrice() {
		return miaoshaPrice;
	}
	public void setMiaoshaPrice(Double miaoshaPrice) {
		this.miaoshaPrice = miaoshaPrice;
	}
	public Integer getStockCount() {
		return stockCount;
	}
	public void setStockCount(Integer stockCount) {
		this.stockCount = stockCount;
	}
	public Date getStartDate() {
		return startDate;
	}
	public void setStartDate(Date startDate) {
		this.startDate = startDate;
	}
	public Date getEndDate() {
		return endDate;
	}
	public void setEndDate(Date endDate) {
		this.endDate = endDate;
	}	
	}

这里是将两个表做连接查询(miaosha_goods mg left join goods g),我们需要查找的数据库表里面的各个字段对应到我们GoodsVo里面的属性,那么就可以给其赋值。
g.*,mg.stock_count,mg.start_date,mg.end_date,mg.miaosha_price:代表goods 表里面的所有字段加上miaosha_goods里面的stock_count,start_date,end_date,miaosha_price

注意:使用注解@Param(“goodsId”)指定@Select语句中的#{goodsId}字段,一一对应起来

	@Mapper
	public interface GoodsDao {
	//两个查询
	@Select("select g.*,mg.stock_count,mg.start_date,mg.end_date,mg.miaosha_price from miaosha_goods mg left join goods g on mg.goods_id=g.id")  
	public List<GoodsVo> getGoodsVoList();
	@Select("select g.*,mg.stock_count,mg.start_date,mg.end_date,mg.miaosha_price from miaosha_goods mg left join goods g on mg.goods_id=g.id where g.id=#{goodsId}")  
	public GoodsVo getGoodsVoByGoodsId(@Param("goodsId")long goodsId);
	//stock_count>0的时候才去更新,数据库本身会有锁,那么就不会在数据库中同时多个线程更新一条记录,使用数据库特性来保证超卖的问题
	@Update("update miaosha_goods set stock_count=stock_count-1 where goods_id=#{goodsId} and stock_count>0")
	public void reduceStock(MiaoshaGoods goods);    
	}
  1. 前端goods_list.html页面代码:
<!DOCTYPE html>
<!-- 使用thymeleaf,配置相应的 -->
<html xmlns:th="http://www.thymeleaf.org">  <!-- th!!! 命名空间使用 -->
<head>
<meta charset="UTF-8"/><!--<meta charset="UTF-8" />  thymeleaf模板引擎默认是Template modes:HTML5解析的,所以解析比较严格。  -->
<title>商品详情</title>
	<!-- thymeleaf引入静态资源的方式,@加大括弧    "/" 代表static路径-->
	<!-- jquery -->
	<!-- <script type="text/javascript" th:src="@{/js/jequery.min.js}"></script> -->
	<script type="text/javascript" th:src="@{/jquery-validation/lib/jquery-1.11.1.js}"></script>
	<!-- bootstrap -->
	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css" integrity="sha384-9gVQ4dYFwwWSjIDZnLEWnxCjeSWFphJiwGPXr1jddIhOegiu1FwO5qRGvFXOdJZ4" crossorigin="anonymous"/>
	 -->
	<link type="text/css" rel="stylesheet" th:href="@{/bootstrap/css/bootstrap.css}"/>
	<script type="text/javascript" th:src="@{/bootstrap/js/bootstrap.min.js}"></script>

</head>
<body>


	<div class="panel panel-default">
		<div class="panel-heading">秒杀商品列表</div>
		<table class="table" id="goodslist">
		<tr><td>商品名称</td><td>商品图片</td><td>商品原价</td><td>秒杀价</td><td>库存数量</td><td>详情</td></tr>
		<tr th:each="goods,goodsStat:${goodsList}">
			<td th:text="${goods.goodsName}"></td>
			<td><img th:src="@{${goods.goodsImg}}" width="80" height="60"></img></td>
			<td th:text="${goods.goodsPrice}"></td>
			<td th:text="${goods.miaoshaPrice}"></td>
			<td th:text="${goods.stockCount}"></td>
			<td><a th:href="'/goods/to_detail/'+${goods.id}">详情</a></td>
		</tr>
		</table>
	</div>
</body>
</html>
  1. 效果

在这里插入图片描述

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值