day03下

完成会员相关的功能

对照着接口文档来写,前端的接口请求是这样的

于是我们就是后端写这个服务,先写Controller层

mybatis-plus自带查询全部的方法,也就list(),注意要把这个方法给暴露出来给dubbo以实现rpc

这是查询出来的结果,接下来要实现另外的接口,也就是

要实现下面的方法

 方法实现如下:

可以直接调用selectPage()进行分页查询,这是mybatis-plus自带的方法,最后为了避免每次都要自己封装PageInfoVo,在这个类里面写了静态方法

功能完成,查询的结果如下:

 

总之我们就是打开一个前端项目,会出错的403接口一个个的去实现就好了

 

我们先来查询当属性id为1时的分类有哪些

第一个是分类属性,第二个type=0表示是销售属性,type=1表示是基本规格参数

于是当你实现了第一个分类属性的方法后,发现多了一个错误。

就是要返回的到底是销售属性还是基本规格参数

接下来就要实现这个方法

和前面的步骤一模一样

查到的结果返回,于是就实现了这样的效果

 

要把图片上传到阿里云,具体百度java怎么上传文件到阿里云

 

接下来开始创建商品,创建商品是一个难点,因为你创建了一个商品,很多张表都要更新。

代码如下:

 

确实很复杂,因为要保存到不同的表里面,这里要注意的是前端传过来的商品信息是不包括商品id的,因为这是后端将商品保存到商品信息表后才会生成一个商品id,然后调用mybatis-plus自带的insert方法将数据插入数据库,不过难点不在这儿,而是有可能会失败,这个时候要进行事务的回滚,可能会想到的是回滚啊,加上@Transactional不就行了,但是这样的话是这个方法全部回滚,也就是说可能只是错了一小步,但是要全部重新填写,太麻烦了。

执行一个事务时要考虑哪些是必须要回滚的,哪些是可以忽略的。我们这里希望商品的核心信息出错了一定要回滚(例如这里的基本数据,sku),也就是核心信息不要受到其他信息的影响。

于是把这个大方法拆分成了几个小方法,这里最重要的是使用了ThreadLocal,保证每个线程只有自己的线程内部的变量,就是商品的id,而不会因为多线程导致线程不安全

 

 

接下来就是实现事务了,首先打开事务功能,加上注解

如果你在一个类的一个方法里调用该类的其他方法,那么无论怎么做这些都被看做是一个事务,因为spring中事务的实现是靠的aop,而aop靠的是自动代理,假如你调用一个方法,这个方法里调用了该类的其他方法,这个时候其他方法根本不会被自动代理,而是直接就被使用了,所以就没有被包装成代理类。那么现在的做法就是手动把一个类变成代理类

先开启自动代理

通过这个方法变成代理类

这样之后才能够使用try catch达到出异常时如果不是关键信息依然不会回滚,异常处的前面的都能执行,而出异常处才回滚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值