这里听得不是很明白
来源: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生成目录,再在生成的目录里面创建图片,创建图片之后才能得到路径,再更新得到的图片路径回先前创建的记录里
00
相似问题