这里听得不是很明白

来源:4-5 店铺注册之Service层的实现

qq_蓝骏毅_04076633

2019-12-02

@Transactional
public ShopExecution addShop(Shop shop, File shopImg) {
//1.空值判断
if(shop == null) {
return new ShopExecution(ShopStateEnum.NULL_SHOP);
}

	try {
		//2.给店铺信息赋初始值
		shop.setEnableStatus(0);
		shop.setCreateTime(new Date());
		shop.setLastEditTime(new Date());
		//3.添加店铺信息
		int effectedNum=shopDao.insertShop(shop);
		if(effectedNum <= 0) {
			throw new ShopOperationException("店铺创建失败");
		}else {
			if(shopImg != null) {
				//存储图片
				try {
					addShopImg(shop, shopImg);
				} catch (Exception e) {
					throw new ShopOperationException("addShopImg error:" + e.getMessage());
				}
				// 更新店铺的图片地址
				effectedNum = shopDao.updateShop(shop);
				if (effectedNum <= 0) {
					throw new ShopOperationException("更新图片地址失败");
				}
			}
		}
	} catch (Exception e) {
	}
	return new ShopExecution(ShopStateEnum.CHECK, shop);
	
}
private void addShopImg(Shop shop, File shopImg) {
	
	//获取shop图片目录的相对值路径
	String dest = PathUtil.getShopImagePath(shop.getShopId());
	
	String shopImgAddr = ImageUtil.generateThumbnail(shopImg, dest);
	
	shop.setShopImg(shopImgAddr);
	
}
写回答

1回答

翔仔

2019-12-03

添加店铺需要理清业务逻辑

主要是先往数据库insert一条tb_shop的记录,插入成功后,会返回店铺的id shopId,此时再根据shopId在存储图片目录的地方创建一个shopId的文件夹,此后所有跟这个店铺相关的图片都会存储在这个文件夹下,有了文件夹之后,就能创建图片了,将创建好的图片保存在这个文件夹里。随后再把图片的相对路径更新回新建的记录中,完成整个业务。

结合上面说的和视频外加代码来理解,这样就简单了

为什么要先插入再更新?主要是为了获取到shopId,然后再创建出文件夹来,因为程序里我们需要将图片存储到特定的店铺里面,所以会依据shopId建立对应于该店铺的文件夹,而shopId需要先insert才会在数据库里生成,所以需要先添加,再根据shopId生成目录,再在生成的目录里面创建图片,创建图片之后才能得到路径,再更新得到的图片路径回先前创建的记录里

0
0

Java双版本(SSM到SpringBoot)校园商铺全栈开发

SSM商铺V1.0,解决毕设痛点;SpringBoot商铺V2.0,满足工作刚需

5113 学习 · 8144 问题

查看课程