专栏首页零基础自学Java微服务】155:商品新增业务(完)

微服务】155:商品新增业务(完)

学习计划安排如下:

终于把商品新增业务做完了,说个老实话我若是发点狠,一天时间多写点搞定就好了。

一篇文章的话,观感也好,结果硬生生地被我拖成了3篇文章。

一、请求相关以及实体类

无论是查询也好还是新增也罢,都是一样的思路,先确定请求相关的4块内容:

①请求路径/方式

真实路径也就是goods,请求方式为Post,一般新增业务请求都是Post请求。

这也很好理解,get请求是将参数拼接到路径后面的,而新增的请求参数是有很多的,如果用get请求,那请求路径就很长一串的了。

②返回值

通过找到对应的前端代码,可以判断其返回值为空,一般新增业务返回值都为空。

③实体类和请求参数

前端页面中的数据、Java中的数据以及数据库中的数据它们之间是如何对应起来的呢?

此处Java中的数据也就是Spu这个实体类,而json格式的数据就是前端和后台沟通的桥梁:

  • 通过@RequestBody将请求中的json数据转换成Java实体类。
  • 通过@ResponseBody将响应的Java实体类数据转换成的json数据。

而数据库,因为我们是使用的Mysql数据库,所以对应的就是数据表。

而我们观察请求数据除了对应Spu实体类本身的属性外,还多出了两个属性,是个sku集合,一个是spuDetail。

所以给Spu实体类中添加这两个属性,便于接受请求时将数据转换成Java对象。

但是Spu对应的数据表中并没有这两个字段,故用@Transient说明该字段是瞬态的。

瞬态字段就可以理解成接受请求考虑该字段,但在对数据库操作时不考虑该字段。

二、Java代码编写

确定了请求和实体类,Controller层代码也就直接确定了。

1Controller层代码

使用注解@RequestBody即将前端的json数据转换成Java实体类对象。

有@RequestBody也有@ResponseBody,那为何一般都不写@ResponseBody呢?

因为@RestContoller就包含了@Contoller和@ResponseBody这两个注解。

处理后的数据都是转换成了json数据再响应给前端页面的。

响应状态码也就是201,商品新增完成,其中build表示响应数据为空。

2Service层代码

这块就比较复杂了,因为涉及到了几张数据表的操作,代码很长,分成两大块来说明。

有一点值得注意的是

此处涉及到多张数据表的操作,所以需要使用到事务,要么都成功,要么都失败。

①新增Spu

使用通用mapper根据对象选择性新增数据即可,当然这里有些细节要注意:

  • spu数据表中的字段有一些前端json数据中是没有赋值的,比如id,Valid这些,所以自行添加。
  • 像Saleable这个字段代表了是否上下架,这个是根据具体需求来设定是否上下架。
  • 关于创建时间和修改时间这两个字段也要做一个修改,创建时间一般就是当前时间,而前端数据中的创建时间就是修改时间。

总之就是一些比较简单的细节问题,初次写业务很容易忽视掉,多写几次就好了。

②新增SpuDetail

关于spu详情,本来就是spu中的属性,只不过由于字段名较长就将其独立成一张表了。

③Sku新增

因为每次新增会有多个sku,是一个集合,所以需要将其遍历并一一完成新增操作。

关于其时间相关属性的设置也是一样的。

④初始化stock

sku代表的就是一个确定的商品,每一个sku都对应有库存量stock这个属性。

所以每次遍历的时候都要初始化stock,并将其添加到库存集合中。

最后再将库存集合批量添加到数据库中。

关于批量新增

通用mapper中继承InsertListMapper接口可以实现批量新增,这个以前也说明过

三、说明

上述就是对新增操作的一个完整说明,代码写完之后,在前端页面保存商品信息。

会向服务器发送请求,服务器接收请求后会根据上述写的代码,依次对数据库中的4张数据表完成新增操作。

此外因为新增操作涉及到了4张数据表,都有其对应的Java实体类,有的以前就编写过,此次文章中就没有一一都说明。

本文分享自微信公众号 - 刘小爱(liuxiaoai946),作者:刘小爱

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-09-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【微服务】142:nginx反向代理的使用

    现在条件有限,不可能说去注册一个域名来使用,因此我们可以伪造本地的hosts文件。

    刘小爱
  • 【微服务】158:Elasticsearch的使用

    而默认的中文分词是将每个字看成一个词,会被分为“我”,“是”,"中","国","人"。

    刘小爱
  • 【Java】基础29:出现异常怎么办?死了都要try

    try:尝试的意思,也就是说这块代码可能有问题,我就尝试着把它用大括号框起来,以防它出错。

    刘小爱
  • Linux的lscpu命令

    lscpu命令从sysfs、/proc/cpuinfo、或者某些适用于特定架构的库中收集数据。命令的输出会以人类易读的方式展示如下信息:cpu、线程、核心、插槽...

    于小勇
  • Foley音乐:学习从视频生成音乐

    中文摘要:本文介绍了Foley Music系统,该系统可以为人们演奏乐器的无声视频片段合成合理的音乐。我们首先为视频到音乐生成器确定两个关键的中间表示形式:视频...

    用户7454122
  • ReactiveSwift源码解析(二) Bag容器的代码实现

     今天博客我接着上篇博客的内容来,上篇博客我们详细的看了ReactiveSwift中的Observer已经Event的代码实现。接下来我们来看一下Reactiv...

    lizelu
  • 玩转linux只需要几个命令

    linux一说都是搞开发玩的,敲敲键盘就能完成所有的工作。其实你也可以这么玩,玩游戏的除外哦。 那我们就来侃侃如何玩,linux是命令的天下,高级的命令那是相...

    程序员互动联盟
  • 【C#】妈妈再也不用担心自定义控件如何给特殊类型的属性添加默认值了,附自定义GroupBox一枚

    ------------------更新:201411190903------------------

    AhDung
  • kali的命令基础

    kali为Linux的操作系统,kali Linux包含很多安全和取证方面的相关工具。支持ARM架构。下面为你们介绍一下kali的一些命令。

    网e渗透安全部
  • iOS开发-KVC从使用到原理详解(1)

    相比往年的iOS招聘,相比之前波涛汹涌,这会已经是相对风平浪静.但是实际上这样的风平浪静只不过是由于无法坚守的iOS 开发者相继退出而已.但是该有的竞争...

    CC老师

扫码关注云+社区

领取腾讯云代金券