gpt4 book ai didi

java - 如何在 Spring Boot 中正确创建非持久存储库?

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

我想将资源数据存储在 Spring Boot RESTful Web 服务中的内存中(例如,在 Map 中,非持久性)。我是 Spring(Boot)新手,我不确定执行此操作的首选方法是什么。

创建一个包含资源的存储库( @Repository )是执行此操作的正确方法,还是首选创建服务组件 或者使用其他方法?

假设我希望待办事项与标签具有多对多关系,如下所示:

@RestController
@RequestMapping("/todos")
public class TodoController {
@Autowired
private TodoRepository todoRepository;
@Autowired
private TagRepository tagRepository;

...
}

重构Controller类中的关系可以吗?这应该发生在中间 TodoService 类中吗?

最佳答案

我对此的看法非常简单。

如果你正在做一个基本的 CRUD 应用程序,没有太多的知识,而只是一种与数据库交互的方式,那么你真的不需要依赖 Service,然后是的,从 ControllerRepository 的依赖关系很好。

举个例子:当您向数据库添加新的 Todo 时,您是否总是创建一个新的 Tag ?如果是,那么也许这两个实体链接在一起,并且应该通过中央方式(服务)进行寻址。这样,您可以确保创建 Todo 的人也将创建关联的标签。但如果这两个实体没有任何共同点,那么将它们分开就可以了。

关于您的其他问题,Repository 的问题。您可以轻松地编写您想要的代码。在spring中,如果你看一下注解@Repository的代码,你会发现它无非是一个@Component。术语Repository在这里只是为了帮助您和您的团队通过轻松识别每个类的角色来理解您的代码库。根据定义,Repository 是对您的 Domain 对象(在您的情况下为 Todo)的访问。无论其背后的持久性系统是什么,这只是对域对象的访问。

这是您可以执行此操作的示例。

public interface TodoRepository {
int save(Todo todo);

Todo findById(int totoId);
}

@Repository
public class InMemoryTodoRepository implements TodoRepository {
private Map<int, Todo> todos = new HashMap<>();

public Todo save(Todo todo) {
int newId = // generate new Id;
todos.put(newId, todo)
return newId;
}

public Todo findById(int totoId) {
return todos.get(todoId);
}
}

这样,当您将 InMemorySystem 更改为我不知道是什么的数据库时,您只需创建一个实现该接口(interface)的新类,然后就可以了,又名 低耦合

关于java - 如何在 Spring Boot 中正确创建非持久存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60154611/

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