今天开始学习一个不复杂电商商城项目,不用分布式。暂定使用springboot+微信小程序的方式来构建一个比较简单的商城小程序。其中,所有数据获取的接口都放在idea中,小程序端通过wx.request(http请求)进行调用,小程序端仅做数据展示以及简单的业务处理(比如购物车,订单状态等等)。
学习方法(暂定):前端代码使用固定的,编写后端代码让其调用接口进行展示
希望获得的学习成果:熟悉掌握电商项目的开发流程,熟悉电商项目的结构设计(表结构,业务流程/逻辑,模块分类等)
-------------------------------------------------分割线24.8.11---------------------------------------------------
第一天:熟悉代码,熟悉模块划分,了解业务需求
下一阶段目标:理解数据库表结构,学习项目设计过程
-------------------------------------------------分割线24.8.14-------------------------------------------------
前两天上班比较忙,所以没什么空来续追这个项目
今天学习商品表(实体),商品标签表(实体),商品标签引用表(抽象)。表结构设计。
上面三张表的关系很容易理解,一个商品可能会有多个标签,一个标签会应用到一批商品上,这两个都是偏具象的(存在具象属性)。因此考虑将其作为实体表(即对应一个dto类),将两者之间多对多的关系抽出来作为一张引用表来维护这种关系,一张引用表包含多个商品多个标签(如果有想看表结构的打评论或者私信,现在考虑篇幅我就不发了)。
今日收获:电商业务的划分,数据表结构的设计
明天目标:继续学习数据表结果(运费,价格库存,sku--规格,)
-------------------------------------------------分割线24.8.16-------------------------------------------------
今天梳理了这个项目需要用到的依赖,以及多模块之间的关系,梳理内容以及遇到的问题内容较多,放在了这里电商项目学习摸索笔记2-CSDN博客。
业务划分:
商品类:
ProdController:商品接口
ProdTagController:商品分组标签接口
SkuController:sku规格接口
展示/与用户交互类:
CategoryController:分类接口 IndexImgController:首页轮播图接口 NoticeController:公告管理接口 ProdCommController:评论接口 SearchController:搜索接口 ShopCartController:购物车接口 SmsController:发送验证码接口
用户类:
UserController:用户接口 UserRegisterController:用户注册相关接口 UserCollectionController:用户收藏接口
地址类:
AreaController:省市区接口 AddrController:地址接口 DeliveryController:查看物流接口
订单支付类:
OrderController:订单接口 MyOrderController:我的订单接口 PayController:支付接口 PayNoticeController:支付回调接口(拓展)
-------------------------------------------------分割线24.8.20---------------------------------------------------
今天继续更新...
今日完成业务(---ProdController:商品接口---)
收获:
在数据库查询中,单表查询大多可以用mybatisplus解决(很常用不介绍),而链表查询,目前用到最多的就是左连接.
左连接:是以左表为基础,根据ON后给出的两表的条件将两表连接起来。结果会将左表所有的查询信息列出,而右表只列出ON后条件与左表满足的部分。
-- left join
select * from A left join B on A.id = B.id
-- left outer join
select * from A left outer join B on A.id = B.id
项目业务例子:
<select id="pageByTagId" resultType="com.dora.shop.bean.app.dto.ProductDto"> SELECT <include refid="prodAndShopNameWithNoContent_SQL"/> //这里是嵌入了一段sql FROM tz_prod p LEFT JOIN tz_prod_tag_reference ptr ON ptr.`prod_id` = p.`prod_id` LEFT JOIN tz_prod_tag pt ON pt.`id` = ptr.`tag_id` LEFT JOIN tz_shop_detail sd ON p.shop_id = sd.shop_id WHERE pt.`id` = #{tagId} AND p.status = 1 //逻辑删除标识 ORDER BY p.`update_time` DESC </select>
查询取p.prod_id, p.pic, p.prod_name, p.price, p.brief, sd.`shop_name`列
将商品表作为基础(tz_prod 全都要),商品标签引用表(tz_prod_tag_reference )通过商品id(prod_id)连接(只要prod_id与商品表相同)。商品标签表(tz_prod_tag )通过标签id(pt.`id`)连接(pt.`id`需要与[商品表,标签引用表]连接后的结果中的标签id相同(ptr.`tag_id`)).
即:根据指定标签(#{tagId})找到所有引用了该标签的商品的商品详细信息。并根据更新时间倒序排序。
内连接:内连接查询的是两张表的并集,也就是A表和B表都必须有数据才能查询出来
写法3种:
-- join
select * from A join B on A.id = B.id
-- inner join
select * from A inner join B on A.id = B.id
-- 逗号的连表方式就是内连接
select * from A , B where A.id = B.id