有时候我们会有业务场景去解决数据库幻读现象:(比如某条记录的某几个属性合起来需要在记录里唯一) 这个时候我们需要做的是添加一个校验字段对他做唯一约束,值是这几个字段的拼接 这里为什么用校验字段而不用原字段呢? (有时候我们在做删除的时候只做逻辑删除 这时候唯一约束就好导致失效的记录让有效的记录无法插入, 而校验字段不一样 你在做失效处理的时候给校验字段赋一个随机值就好了) 一般要解决幻读的场景我们都需要(不存在插入并且返回插入值 存在直接查询结果值) 以下是代码示例
public ComArea findAreaOrAdd(String comCode, String name, String flag, boolean throwException) { if (name == null || name.equals("null")) { logger.error("插入失败 请检查name是否位空 areaId={}", name); throw new BaseRuntimeException("0x00110301", "更新失败 请检查name是否位空"); } ComArea comArea = new ComArea(); comArea.setComcode(comCode); comArea.setComAreaId(UUID.randomUUID().toString().replace("-", "")); comArea.setName(name); String comFlag = "1" + flag.substring(1, flag.length()); comArea.setComFlag(comFlag); comArea.setFlag(flag); comArea.setValid("Y"); comArea.setDateCreate(new Date()); comArea.setDateModify(new Date()); //因为幻读会导致生成重复的code code=>comcode+name md5生成的 String code = DigestUtils.md5DigestAsHex((comCode + name).getBytes()); comArea.setCode((comCode + code).substring(0, 32)); //standardcode 做了唯一约束删除的时候要给standardcode一个随机值 comArea.setStandardCode(comArea.getCode()); ComArea comArea1 = null; try { comArea1 = comAreaService.save(comArea) ? comArea : null; } catch (Exception e) { if (throwException) { throw new BaseRuntimeException("0x00110301", "插入失败 请检查名称是否重复 [" + name + "]"); } else { comArea1 = comAreaService.getOne(new QueryWrapper<ComArea>().lambda().eq(ComArea::getComcode, comCode) .eq(ComArea::getName, name).eq(ComArea::getValid, "Y") , false); } } return comArea1; }
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox网页视频下载器 下载地址: ImovieBox网页视频下载器-最新版本下载
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算