java 批量更新怎么判断是否都成功_实体类


今天是刘小爱自学Java的第155天。

感谢你的观看,谢谢你。


java 批量更新怎么判断是否都成功_实体类_02


学习计划安排如下:

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

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

一、请求相关以及实体类

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


java 批量更新怎么判断是否都成功_实体类_03


①请求路径/方式

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

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

②返回值

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

③实体类和请求参数

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


java 批量更新怎么判断是否都成功_Java_04


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

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

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

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

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

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

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

二、Java代码编写

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

1Controller层代码


java 批量更新怎么判断是否都成功_实体类_05


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

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

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

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

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

2Service层代码

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


java 批量更新怎么判断是否都成功_Java_06


有一点值得注意的是

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

①新增Spu

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

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

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

②新增SpuDetail

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


java 批量更新怎么判断是否都成功_实体类_07


③Sku新增

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

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

④初始化stock

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

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

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

关于批量新增

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

三、说明

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

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

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