V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leeqingshui
V2EX  ›  Java

数据库保存或更新返回值的问题, void or int ?

  •  
  •   leeqingshui · 182 天前 · 1067 次点击
    这是一个创建于 182 天前的主题,其中的信息可能已经有所发展或是发生改变。

      对数据库 insert 或 update 后会返回受影响的行数,那么这个行数需要返回给前端吗?

        public int insert(OrgDTO orgDTO) {
            OrgEntity orgEntity = new OrgEntity();
            BeanUtils.copyProperties(orgDTO, orgEntity);
            String curUsername = userLocalService.getUsername();
            orgEntity.setId(idWorkerUtil.nextId())
                     .setCreateUsername(curUsername);
            return orgMapper.insert(orgEntity);
        }
    

      第一种方式如上使用 int 返回给前端,这需要 return ,那么若遇到这种情况:

    • 需要在 insert 后同步到缓存,那么代码就会不太美观
       int count = orgMapper.insert(orgEntity);
       // 缓存
       ...
       return count;
    

      即使返回返回了 int 给前端,但针对新增更新这种接口,前端一般是直接判断后端状态码是否等于 200 ,不会进一步去看返回行数是否大于一吧?另外出错的话也是被全局异常拦截,所以此时返回 int 无意义?

      那么请教下各位,你们一般针对这种简单的保存和更新接口返回值用的是啥的,用 void ?

        public void insert(OrgDTO orgDTO) {
            OrgEntity orgEntity = new OrgEntity();
            BeanUtils.copyProperties(orgDTO, orgEntity);
            String curUsername = userLocalService.getUsername();
            orgEntity.setId(idWorkerUtil.nextId())
                     .setCreateUsername(curUsername);
            orgMapper.insert(orgEntity);
        }
    
    6 条回复    2022-06-08 21:12:30 +08:00
    alen0206
        1
    alen0206  
       182 天前
    可以返回新增或更新后的实体 也可以返回 true or false (不过一般新增出错 都会抛出异常 给前端提示了)
    Huelse
        2
    Huelse  
       182 天前
    默认返回 1 或 0 ,或返回影响的 ID
    kaers
        3
    kaers  
       182 天前
    除非前端需要用到这个 count. 一般都不返回的, 前端只需要知道执行结果是成功还是失败就行了
    leeqingshui
        4
    leeqingshui  
    OP
       182 天前
    @alen0206 嗯嗯,这个问题应该是主要兼容前端去考虑,返回新增或更新后的实体这个在部分场景前端确实需要,比如前端准备新增或更新数据前端会需要一个对话框表单,若点击保存调后端接口后弹框不关闭(此对话框又属于另一个对话框里的一部分),那么确实需要返回实体给前端;
    true or false 前端一般是直接判断后端状态码是否等于 200 ,不会进一步去看这个字段值,一般新增出错 都会抛出异常 给前端提示了,似乎没多大意义。
    nice~
    nothingistrue
        5
    nothingistrue  
       182 天前   ❤️ 1
    全 ORM 的惯例是:
    保存(新增或修改)返回修改后的实体;
    单独的新增方法返回新增后的实体或者主键;
    单独的增量修改方法返回修改后的实体或者主键;
    删除返回删除前的重新查询的实体;
    批量 /动态修改,及批量 /动态删除,返回实际受影响的行数。

    惯例只是惯例,是否遵循取决于自身得需要。但是,绝对不能为了代码美观而不要返回值。
    leeqingshui
        6
    leeqingshui  
    OP
       182 天前
    @nothingistrue 哈哈,老哥说的也有道理,我有时候写代码有点强迫症了~
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   3274 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 13:22 · PVG 21:22 · LAX 05:22 · JFK 08:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.