Service的流程

1.插入店铺信息->2.返回店铺Id->3.根据店铺Id创建存储图片的文件夹->4.把文件夹的地址更新回店铺信息中

只要有一步出错 就要事务回滚

创建ShopService 接口

接着写实现类ShopServiceImpl

在实现service接口中添加@Transational事务标签

只有当程序抛出RuntimeException的异常或继承RuntimeException类 时,事务才会回滚,如果只是抛出Exception,事物不会回滚

 1 @Service
 2 public class ShopServiceImpl implements ShopService {
 3
 4     @Autowired
 5     private ShopDao shopDao;
 6
 7     @Override
 8     @Transactional
 9     //1.插入店铺信息->2.返回店铺Id->3.根据店铺Id创建存储图片的文件夹->4.把文件夹的地址更新回店铺信息中
10     public ShopExecution addShop(Shop shop, CommonsMultipartFile shopImg) {
11         //空值判定
12         if(shop == null){
13             return new ShopExecution( ShopStateEnum.NULL_SHOP);
14         }
15         try{
16             //给店铺信息赋初始值
17             //初识店铺都是 0 审核中
18             shop.setStatus(0);
19             shop.setCreateTime( new Date() );
20             shop.setLastEditTime( new Date() );
21
22             int effectedNum = shopDao.insertShop( shop );
23             //判断插入店铺是否成功,若不成功,则回滚事务
24             if(effectedNum <= 0){
25                 throw new ShopOperationException("插入店铺信息失败");
26             } else{
27                 //存储图片
28                 if(shopImg != null){
29                     try{
30                         addShopImg(shop, shopImg);
31                     }catch(Exception e){
32                         //需要终止事务的进行 就用RuntimeExeception
33                         throw new ShopOperationException( "addShopImg error" + e.getMessage());
34                     }
35                     //更新店铺的图片地址 因为上面只创建了createtime lasttime shopid
36                     effectedNum = shopDao.updateShop( shop );
37                     if(effectedNum <= 0){
38                         throw new ShopOperationException("更新图片地址失败");
39                     }
40                 }
41             }
42         }catch (Exception e){
43             throw new ShopOperationException("addShop error: " + e.getMessage());
44         }
45         return new ShopExecution(ShopStateEnum.CHECK, shop);
46     }
47     /**
48      * 将店铺图片添加到用户相对的文件夹下,并且将店铺信息中店铺图片的地址更新
49      * @param shop
50      * @param shopImg
51      */
52     private void addShopImg(Shop shop, CommonsMultipartFile shopImg) {
53         //获取shop图片目录的相对值路径
54         String relativeImgPath = PathUtil.getShopImgPath(shop.getShopId());
55         String realRelativeImgPath = ImageUtil.generateThumbnail( shopImg, relativeImgPath );
56         shop.setShopImg(realRelativeImgPath);
57     }
58 }

抛出的RuntimeException可以自己定义一个异常类ShopOperationException,继承RuntimeException,这样看上去更加直观的知道是什么异常

1 public class ShopOperationException extends RuntimeException {
2     public ShopOperationException(String msg){
3         super(msg);
4     }
5 }

转载于:https://www.cnblogs.com/windbag7/p/9346257.html

shop--6.店铺注册--店铺注册之Service层的实现相关推荐

  1. 【校园商铺 4章】:店铺注册--Service层的实现(后期还要改造,先前没实现)

    文章目录 1.Thumbnailator图片处理 2. 编写工具类:ImageUtil和PathUtil 3.dto:ShopException和enums:ShopStateEnum 4. Serv ...

  2. 校园O2O商铺平台-店铺注册Service层和Controller层

    店铺注册之Service层的实现 正在更新 店铺注册功能之Controller层的实现 正在更新 店铺注册功能之Controller层的改造 正在更新

  3. 虾皮如何注册店铺_虾皮跨境电商怎样注册店铺?做(shopee)虾皮电商靠谱吗

    (shopee)虾皮刚诞生的时候我就做了,在电商这个行业也有自己的一些经验.经验也许没有其他大卖家丰富,但会将我知道的都进行分享.如果有不懂(shopee)虾皮问题可以+我(V:772024802). ...

  4. 虾皮如何注册店铺_虾皮跨境电商怎么注册店铺?

    做跨境电商可以选择主流的平台入驻或者自己搭建跨境商城,虾皮shopee针对中国跨境卖家,无平台使用费.年费.无保证金的,所以成了很多商家的选择,那么虾皮跨境电商怎么注册店铺呢? 一.如何注册虾皮?有哪 ...

  5. 现欲设计一个电子商务网站系统,该系统需要记录如下信息,其中下划线为标识信息: •客户有客户名、联系电话、配送地址; •商品有商品名、类别; •店铺有店铺名、信誉度、注册地址; •同一商品会在不

    题目要求 现欲设计一个电子商务网站系统,该系统需要记录如下信息,其中下划线为标识信息: 客户有客户名.联系电话.配送地址: 商品有商品名.类别: 店铺有店铺名.信誉度.注册地址: 同一商品会在不同的店 ...

  6. 实战SSM_O2O商铺_10【商铺注册】Service层的实现

    文章目录 概述 ShopService开发步骤 Service层接口类ShopService Service层接口实现类ShopServiceImpl ShopOperationException 单 ...

  7. 注册Tomcat到Window Service服务

    注册Tomcat到Window Service服务 1.软件和环境 环境:JDK1.8 应用服务:Tomcat9.0(非安装版) 操作系统:Windows 2012 2.设置Tomcat为系统服务 w ...

  8. Consul注册中心注册的服务总是红叉 (All service checks failing)

    Consul注册中心注册的服务总是红叉 (All service checks failing) Consul注册中心注册的服务总是红叉 (All service checks failing) 因为 ...

  9. springboot 注册dao层 service 层的三种方式,高级内容详解

    可以使用三种注解来引入DAO层的接口到spring容器中. 1.@Mapper,写在每一个DAO层接口上,如下: 2.@MapperScan和@ComponentScan两者之一.前者的意义是将指定包 ...

  10. 注册中心—注册中心原理

    在微服务架构中,注册中心是最核心的基础服务之一,本文将详细介绍下注册中心的组成部分和它们之前的关系. 目录 一.注册中心原理 二.注册中心功能 三.常见的注册中心 一.注册中心原理 注册中心主要涉及到 ...

最新文章

  1. Team Foundation Server Beta3 安装指南
  2. 秒表项目_【速看】2021年陕西中考体育怎么考?中考体育项目及考试评分标准最全整理来了!...
  3. 开始一个django项目
  4. 三行代码让你的博客访问量上百万
  5. 安装veket到移动硬盘NTFS分区
  6. Android NDK学习(2)
  7. Switch case 超经典练习题
  8. BZOJ4373 : 算术天才⑨与等差数列
  9. 基于TCP协议的摄像头视频网络传输
  10. 我的世界观【文津图书奖获奖作品】
  11. 安装spoonwep
  12. python 合并word并生成目录_使用Python制作WORD报告
  13. 神经网络分析教学目标,神经网络分析教学反思
  14. BZOJ1050 [HAOI2006]旅行comf(Kruskal算法)
  15. AcWing 273. 分级 (推论,DP)
  16. hash算法原理详解
  17. Sharding Sphere ~ Sharding-jdbc分库分表、读写分离
  18. Apriori算法学习和java实现
  19. 数学:分数的加减乘除模板
  20. sql语句中的limit用法

热门文章

  1. FutureTask源码解析(2)——深入理解FutureTask
  2. CUDNN学习笔记(2)
  3. Linux C Serial串口编程
  4. 1、Python基本对象类型----数字
  5. ValueError: No JSON object could be decoded?此种异常的解决方案之一
  6. 换行符在HTML中直接替换为br
  7. ping -r 和tracert
  8. ADO.NET 对象模型
  9. golang mac 环境变量_Golang (Go语言) Mac OS X下环境搭建 环境变量配置 开发工具配置 Sublime Text 2...
  10. oracle数据库考试答题,Oracle数据库试题