gpt4 book ai didi

javascript - 最佳实践 : Spring Boot Backend & jQuery Frontend

转载 作者:行者123 更新时间:2023-12-02 10:52:02 26 4
gpt4 key购买 nike

我目前正在开发一个带有 Spring Boot 2 后端和 jQuery 前端的项目。因此,前端将 Ajax 请求发送到 Spring REST Controller 以操作数据库实体。

当涉及到通过这些 ajax 调用创建具有外部链接实体的实体时(例如创建具有多个地址的人),我会问自己最佳实践是什么,同时考虑事务操作并减少冗余代码。

我已经考虑过这些可能性:

  1. 多次ajax调用使用每个实体一个 ajax 调用创建链接实体并检查它们是否失败。如果失败,请删除所有创建的实体,并为每个实体调用 ajax 调用,就像手动回滚一样。看起来是一个非常糟糕的概念。

  2. 一次 Ajax 调用发送所有参数让一个 ajax 调用发送必须创建的实体的所有必要参数。然后通过实体服务服务器端创建所有实体。但这里如何操作交易呢?那么如何减少冗余代码呢?

提前致谢

最佳答案

首先,我需要知道您正在使用哪个数据库。如果您使用 MongoDB,那么请忘记事务部分(除非您使用 4.0 版本和事务支持)。所以我猜你会选择 SQL 数据库。

您问题的答案可能取决于前端如何处理数据。对我来说,第一个选项无论如何都没有意义。看来您要么想要包含所有地址,要么根本不包含地址,所以我只会对所有地址发出一个请求,因为整个数据被视为不可分割的集合。

使用Hibernate和事务管理器可以轻松解决事务部分(只需将保存地址的方法注释为@Transactional即可)

我会这样实现:

Controller :

@RestController
@RequestMapping("/users")
public class UserController {

@Autowired
private UserService userService;

@PostMapping("/{userId}/address")
public List<Address> addAddress(@PathVariable String userId,
@RequestBody AddressInsertRequest request){

return userService.updateAddresses(userId, request.getAddresses());
}

//Externalize to oter class
public class AddressInsertRequest {

private List<Address> addresses;

public List<Address> getAddresses() {
return addresses;
}

public void setAddresses(List<Address> addresses) {
this.addresses = addresses;
}
}
}

服务:

public class UserService {

//TODO Implement with hibernate
private UserRepository userRepository;

@Transactional
public List<Address> updateAddresses(String userId, List<Address> addressList){
User user = userRepository.findById(userId);
user.setAddressList(addressList);
userRepository.save(user);
return user.getAddressList();
}
}

关于javascript - 最佳实践 : Spring Boot Backend & jQuery Frontend,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52096449/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com