gpt4 book ai didi

java - Spring框架中Service注解的类可以包含SQL/HQL吗?

转载 作者:行者123 更新时间:2023-12-01 16:32:35 25 4
gpt4 key购买 nike

我检查了很多样本​​,但没有找到合适的解决方案。一些文档说“理想情况下,您的业务逻辑层不应该知道有数据库。它不应该知道连接字符串或 SQL。”

我发现一些示例将业务逻辑定位到@Service注释的类,但它们在@Service方法中使用SQL/HQL。

理想的用法应该是什么?如果我们想更改数据库或持久性技术,我们应该只更改 @Repository 注解的类还是两者都更改?

最佳答案

我更喜欢将所有与持久性相关的内容(即查询以及与 JDBC、JPA 或 Hibernate 相关的所有内容)放在 DAO 层中,并让服务层依赖于该 DAO 层来处理与持久性相关的内容。

但主要目标不是能够在不影响服务层的情况下改变持久化技术。例如,虽然如果您从 Hibernate 切换到 JPA,这可能是可能的,但如果您从 JPA 切换到 JDBC,则不可能。原因是

  • JPA 自动保留对实体所做的所有更改,无需更新数据库查询,而 JDBC 则不需要,因此需要额外的更新查询
  • JPA 延迟加载实体之间的关联,而 JDBC 则不然
  • ...

因此,即使所有持久性内容都隔离在 DAO 中,更改持久性技术也会影响服务层。

恕我直言,这种解耦的主要优点是

  • 每个类别的职责更加清晰。它避免了将持久性相关代码与业务逻辑代码混合在一起。
  • 可测试性:您可以通过模拟 DAO 层轻松测试您的服务层。您可以轻松测试 DAO 层,因为它所做的只是对数据库执行查询。

关于java - Spring框架中Service注解的类可以包含SQL/HQL吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13101186/

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