如何更新 DAO 中的对象参数?

How to update object parameter in DAO?

我是 Java 的新手,正在尝试了解 MVC 架构的发展方向。 如果我在浪费你的时间,请原谅我。我写了一个 DAO 服务,它处理 crud 模型(获取、读取、更新、删除)。

   public List<User> getUsers();
   public User getUser(Long userId);
   public void createUser(User user);
   public void updateUser(User user);
   public void delete(Long userId);
}

这是我的抽象 DAO 函数。

    @Override
    @Transactional
    public void updateUser(User user) {
        em.merge(user);
    }

和控制器:

@PutMapping(value = "/{userId}", produces = "application/json")
    public ResponseEntity<UserDTO> update(@PathVariable Long userId, @RequestBody UserDTO user){
        try{
            service.updateUser(user);
            return new ResponseEntity<>(HttpStatus.OK);
        } catch (HttpClientErrorException p){
            return new ResponseEntity<>(HttpStatus.BAD_REQUEST);
        } catch (HttpServerErrorException.InternalServerError u){
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

在服务中:

    @Override
    public void updateUser(UserDTO user) {
        userDAO.updateUser(ApiDTOBuilder.userDTOToUser(user));
    }

如何传递 userId 并将新参数设置到当前用户对象中?

首先您需要使用 DAO 方法获取用户。然后您需要将值设置为用户实体。当您使用@Transactional 时,spring 将负责更新值。

    @Override
    @Transactional
    public void updateUser(Long userId,UserDTO userdto) {

        User user= getUser(userId);
        user.setFirstName(userdto.getFirstName());
        user.setLastName(userdto.getLastName())
       }

此外,如果您没有使用Spring引导,则需要使用

启用事务管理

@EnableTransactionManagement