今天是刘小爱自学Java的第151天。
感谢你的观看,谢谢你。
学习计划安排如下:
-
昨天学习SPU和SKU并设计了SPU数据表表,今天继续完成SKU数据表的设计。
-
根据SPU完成对商品的分页查询,又是分页查询了,和前几天刚写的品牌分页查询几乎一样。
一、SKU数据表设计
今天对于SKU并未涉及到代码上的操作,暂且只做初步了解,也是对昨天的学习补充。
对SPU和SKU做一个简单的回顾,比如某电商网站某品牌手机有几个版本:
- 商品①:“基佬紫”、“8G+256G”…等等
- 商品②:“土豪金”、“16G+512G”…等等
SKU就是具体的某个商品,颜色内存都确定了,也就是订单中对商品的详细说明。
SPU就是它们共有的属性,比如名字都叫小米10,售后服务是同一个……等等。
SPU表有如下字段:
- id和spu_id这不用多说。
- title:商品标题。
- images:商品图片,一个商品会有多个图片。
- indexs:这个字段是能够快速定位商品的具体属性,具体在上图中有说明。
此外还有一个商品的库存属性,因为库存是天天变化的,所以又独立了一张商品库存表。
二、SPU分页查询商品
这个和第146天实现的品牌查询是一样的,也是分页查询,当初我们是从前端页面到后台代码完整地写了一遍。
1请求相关
在商品管理的商品列表选项栏中,点击进入会看到一个分页页面。
①请求路径/方式
spu/page为真实路径,请求方式为get请求。
②请求参数
- key:这个就是搜索框中输入的数据。
- saleable:翻译是可供出售的,也就是用这个参数来控制商品的上下架。
- page:当前页码数。
- rows:每页的行数。
③返回值:返回值即为分页数据。
2Java实体类编写
关于Spu昨天因为时间紧迫讲的比较着急,今天再次做一个详细地介绍。
Spu实体类对应spu表。
Spu是商品的共用属性,既然如此,那么商品品牌、商品分类,以及商品购买页面的标题都是一样的。
因为关于商品描述这个字段内容非常的长,所以将SPU表做了一个拆分。
将一些描述性字段单独又放在了一个数据表中,也就是spu_detail表。
关于generic_spec和special_spec这两个属性,用来保存规格参数信息的值,这里为了方便查询,都是使用json格式。
实体类编写完成,开始代码编写。
三、Java三层代码及测试
Controller层和Mapper层
两个实体类对应两种查询,所以Mapper层中对应两个接口,这里使用通用mapper即可。
无论是查询Spu还是SpuDetail本质上都是对商品的查询,Controller层和Service层都用Goods来表示,当然今天只涉及到Spu查询。
①@GetMapping(“page”)
接受前端发送过来的get请求。
②四个请求参数
其中要注意的是:
- key和saleable这两个属性可有可无,所以用required=false来说明。
- page默认值为1,rows默认值为5,也就是默认查询第一页数据,数据展示5行。
③分页数据返回值
这个当初在通用微服务lxa-common中就说明过,编写了一个分页通用类,但凡是涉及到分页的都可以使用这个类。
也就是PageResult<Spu>,其中泛型根据不同的业务需求来指定,这里就是Spu。
Service层
①开启分页助手
只要是和分页相关的查询,第一步就是开启分页助手。
②条件过滤
根据key模糊匹配对应的字段,Spu中对应的也就是标题title这个字段了。
根据saleable字段确定我们是要查询上架的商品呢,还是下架的商品。
注意这里有一个容易忽略的地方:
valid字段是用来表示数据是否删除了的。
- false表示这行数据是无效数据
- true表示这行数据是有效数据
我们自然是只需要有效数据。
③查询数据
调用spuMapper来查询数据,如果查询结果为空,抛出自定义异常。
④返回值
分页数据封装,分页助手说白了就是查询了分页相关的一些数据,通过PageInfo可以提供。
我们从数据库中只查询了商品相关的数据,至于一共有多少条呀,通过分页助手就能搞定。
代码编写完毕做一个测试:
我们再次点击商品管理中的商品列表,会发现其从数据库中查询到了对应的数据。
但是有一个问题是商品分类和品牌数据还没有查出来,因为Spu只存了它们对应的id并没有存其对应的值,后续再将其逐步完善。
最后
行有不得反求诸己,我是@刘小爱
一个白天上班晚上学习的95后沪漂,不为其它,只为学会自律做好自己,也愿我的每日打卡能给你带来勇气,欢迎点赞关注和评论。