请问这个判断是不是指的这个意思

请问这个判断是不是指的这个意思

  @Override
    public void update(Category updateCategory) {
        if (updateCategory.getName() != null) {
            Category categoryOld = categoryMapper.selectByName(updateCategory.getName());
/*
            进行更新有两种情况,第一种,传入的name数据库中没有同名的数据,说明name和其它数据进行了更新,就是在原来的数据进行了更新
                            第二种,传入的name数据库中有同名的数据,且id相同,说明是在原来数据上name没有改变,其它的数据进行了更新
                            第三种 ,判断条件成立的情况categoryOld != null 根据名字查出来的数据存在,结合后面一句
            !categoryOld.getId().equals(updateCategory.getId()) 库里根据name查出来的id和传入的id不一样,说明name相同两个id不同,此时就存在了同name不同id的两条数据,此时重复了,不能更新
*/
            if (categoryOld != null && !categoryOld.getId().equals(updateCategory.getId())) {
                throw new ImoocMallException(ImoocMallExceptionEnum.NAME_EXISTED);
            }
            int count = categoryMapper.updateByPrimaryKeySelective(updateCategory);
            if (count == 0) {
                throw new ImoocMallException(ImoocMallExceptionEnum.UPDATE_FAILED);
            }
        }
    }


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕小蓝 2022-10-28 16:52:46

同学你好,老师没有理解同学描述的第一种和第二种情况的描述。

同学描述的第三种情况的理解是正确的。

对于同学描述的第一种情况,传入的name值,在数据库中没有相同的数据时,说明不存在重名冲突现象,是可以进行更新的。

对于同学描述的第二种情况,传入的name值,在数据库中存在相同的数据时,存在对自身进行更改的情况。如果不是对自身进行更改,则发生重名冲突。所以需要进行更深层次的验证,即验证id是否一致。

祝学习愉快~

  • 这个传入的name值,在数据库中存在相同的数据时,存在对自身进行更改的情况。如果不是对自身进行更改,则发生重名冲突。所以需要进行更深层次的验证,即验证id是否一致。


    自身更改与id与啥关系??

    2023-02-08 10:28:10
  • 同学你好,代码中是根据name进行查询的,此时如果查询到结果时,存在两种可能性:

    1.查询到的是自身的信息;

    2.前台传入的name数据与数据库中已有的数据发生了冲突。

    而是否冲突,是需要根据id来进行判断的,例如下面的情况:

    1.前台传入的数据中,不需要对name值进行更改,而是更改其他属性,此时在数据库中一定可以查询到name相同的数据。

    2.前台传入的数据中,对name进行了更改,但是这个name值在数据库中已经被其他id的数据使用了。

    所以只是name值相同,不能确定是否是对自身进行更改,需要使用id来进一步判断。

    祝学习愉快~

    2023-02-08 10:50:27
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师