关于sysDeptService里的方法
来源:7-3 更新部门接口开发

慕UI33545
2018-07-29
问题1:update方法里面 为什么要用checkExists验证两次? 第一次我理解为判断传入参数是否合规。 第二次为什么还要判断?
问题2:checkExists 的countByNameAndParentId 的sql 为什么要id!=#{id} ,什么叫更新的时候排除这个部门?验证更新的时候id这个条件验证是否必须?没太明白。
2回答
-
Jimin
2018-07-30
以我当前的数据为例,目前UI(id为4)部门下面有两个子部门,UI和UE(parent_id为4)
这时如果想在UI上下面新增一个部门,部门名称在做校验时就需要对比是否和已有的两个部门名称重复,不能做任何行的排除;
而如果是修改UI(id为13)这个部门呢(可能是修改这个部门的某一个属性,可能是部门名称,也可能是seq或其他),这时在做校验时就要排除id = 13这一行,就是排除待更新行后去检查。这时如果UI这个部门名称本身没修改,不会查到重复的部门名称;修改为UE会查到重复的部门名称;修改为非UE的其他名称都不会查到重复的部门名称。
00 -
Jimin
2018-07-29
你好,那个checkExist的操作确实多写了一次,可以去掉一个的,之前更新了一次代码,已经删除了。
重点说一下这个方法的实现,对应的业务逻辑是同一个层级下不该有两个相同名称的部门,这属于比较正常的业务要求。
这个方法本身是同时为新增部门和更新部门两个方法提供的,新增的时候很明显是没有部门id的,只需要在同一个层级下看是否有同样的名称就可以了。
而更新部门时,之前数据库里对应有一个这个部门名称的,如果你不修改部门名称,修改了其他内容去更新,这里很明显同一个层级下会有相同的名称,就是当前这个部门自己。因此这里是通过加上id的判断,保证做校验时自己是什么都不在检查的数据里,本质上是拿这个部门的数据和层级下其他部门信息做检查是否有冲突。042018-07-30
相似问题