SptingBoot构建电商基础秒杀项目时遇到的问题

本文详细介绍了使用SpringBoot构建电商秒杀项目时遇到的问题及解决方案,涉及Mybatis接入、异常处理、用户注册登录、商品管理、交易模型创建等多个环节。在Mybatis使用中,通过@MapperScan解决了@Mapper注解的繁琐,同时针对异常进行了通用返回对象的定义和处理。在用户注册功能实现中,详细阐述了手机号验证、 otp验证码发送与校验、数据库插入的注意事项。此外,还讨论了商品模型管理,包括商品创建和库存管理。在交易模型管理中,实现了下单功能,包括库存减扣、订单入库和商品销量增加,以及订单号的生成策略。文章最后探讨了秒杀活动模型与商品模型的结合,确保了活动状态的正确展示和订单价格的动态调整。
摘要由CSDN通过智能技术生成

一、应用SpringBoot完成基础项目搭建

2-3 Mybatis接入SpringBoot项目

2-4 Mybatis自动生成器使用方式

在使用Maven自动生成接口UserDOMapper和UserPasswordDoMapper后,需要在接口文件上加上@Mapper注解,让DemoMapper能够让别的类进行引用。
在这里插入图片描述
使用@Mapper注解的缺点:
·直接在Mapper类上面添加注解@Mapper,这种方式要求每一个mapper类都需要添加此注解,麻烦。
改进方法:使用@MapperScan注解
在这里插入图片描述
此时发现,下面还是显示UserDOMapper未找到。我们还要需要在UserDOMapper上加上注解@Repository,然后就能够正常运行了,与单独加上@Mapper注解的效果一样。

对比:@Mapper注解单独使用就可以把它交给spring管理了,并且别的类可以直接引用。
@Repository也可以把它交给sprin管理,但是在获取该容器中的对象时,需要用@MapperScan扫描到此文件,或者该文件所在的package。

3-1 使用SpringMVC方式开发用户信息

  1. 首先在userservice的实例中UserServiceImpl中:
    1) 通过userDOMapper获得userDO对象(by 传入的id)
    2) 通过userPasswordDOMapper获得userPasswordDO对象(by userDO拿到id)
    3) 通过userDO和usePasswordDO得到userModel(重点方法BeanUtils.copyProperties)
  2. 在UserController中传入参数id给userService.getUserById()方法即可得到userModel,但此时的userModel(里面包含了全部用户信息,包括注册方式和加密后的密码等)并不能直接供UI使用,因此需要在controller下面创建一个viewobject包,创建一个UserVO对象,里面的用户信息是能够传递给UI的部分。
  3. 在UserController中得到userModel后将其转化成UserVO对象,然后供UI使用。(重点方法BeanUtils.copyProperties)。

3-2 定义通用的返回对象–返回正确信息

在上一节中,如果信息在传递过程中都正确,则返回没有问题,但是如果整个传递过程中出现一点问题,前端就只能显示错误信息 500。
创建respons包,创建CommonReturnType类,定义两个属性 status和data
//若status=success,则data内部返回前端需要的json数据
//若status=fail,则data内使用通用的错误码格式
//定义一个通用的创建方法
//如果不带status,则对应的status就是success,然后通过下面的同名函数返回type
public static CommonReturnType creat(Object result)
然后修改UserController中的代码,不要直接返回UserVO,通过CommonReturnType.creat()方法返回status和data(status就是success,data就是UserVO)。注意:这里是返回的正确信息,下面再讲错误信息的处理

3-3 定义通用的返回对象–返回错误信息

首先创建一个名叫error的包,在里面创建一个接口CommonError

  1. 在接口里面添加三个方法:
    1) public int getErrCode(); //用于获取错误码
    2) public String getErrMsg(); //用于获取错误信息
    3) public CommonError setErrMsg(String errMsg); //用于设置自定义错误信息
  2. 然后创建一个枚举类EmBusinessError实现上面的接口,
    定义一个通用错误类型00001,PARAMETER_VALIDATION_ERROR(00001,“参数不合法”),和一个1000开头的用户信息错误,USER_NOT_EXIST(10001,“用户不存在”),
    在枚举类中添加两个属性 int errCode;和String errMsg;添加一个全参构造器并重写三个方法。
  3. 最后创建一个异常类BusinessError实现上述接口,
    在异常类中添加一个属性CommonError,添加两个构造器,一个接收EmBusinessError的参数构造业务异常,一个接收自定义errMsg的参数构造业务异常,最后重写三个方法。

3-4 定义通用的返回对象–异常处理01

在UserController中定义exceptionhandler解决未被controller层吸收的exception

   @ExceptionHandler(Exception.class)//指明收到的是跟类异常就会进入该处理环节
   @ResponseStatus(HttpStatus.OK)//业务逻辑处理上的问题,而不是服务的不能处理的错误(500),返回错误码200
   @ResponseBody//不加该注解,只能寻找本地页面下的一些文件,加上该注解后将返回值以特定的格式(json格式)返回到response的body区域
   public Object handlerException(HttpServletRequest request, Exception ex){
   	
       ······
       return commonReturnType;
   }

3-5 定义通用的返回对象–异常处理02

上面返回的信息非常多,下面把错误信息封装到map中让其只返回errCode和errMsg。
首先把ex强转成BusinessException类,然后用把它的errCode和errMsg放到Map中,最后用CommonReturnType类中的creat方法生成公共错误类型并返回。
优化

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值