【问题标题】:Using Spring Data JDBC in a Spring Boot app在 Spring Boot 应用程序中使用 Spring Data JDBC
【发布时间】:2019-02-12 23:37:02
【问题描述】:

我正在寻找有关如何在 Spring Boot 应用程序中配置 Spring Data JDBC 的信息(Gradle 示例将是理想的)。

我已通读the docs,我知道我需要为每个域类(或域类的“聚合”)定义一个Repository 实现,例如

interface UserRepository extends CrudRepository<User, Long> {

  // custom query methods
  long countByLastname(String lastname);
}

但还不清楚需要添加哪些依赖项,如何将存储库 bean 注入其他 bean,如何向 Spring 指定可以找到存储库 bean 的位置等等。

我特别想看看如何定义一个管理多个表/域类的存储库。例如,一个管理Order 持久性的存储库,它是OrderItems 的集合。 the docs 中的示例仅显示如何将单个域类映射到存储库。

【问题讨论】:

  • 我刚刚从几个月前在 Data JPA 上做的一个项目中得到了闪回。由于您使用的是 Boot,因此不需要自定义存储库上的注释。 Boot 的另一个优点;) 只需验证它在 JDBC 中是否相同。但应该是这样的。

标签: java spring spring-boot spring-data spring-data-jdbc


【解决方案1】:

由于您使用 Spring Boot 来开发应用程序,因此您可以利用启动器 Spring 模块。在特定情况下,依赖项将是

implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'

如果您配置了 Gradle Spring 插件,将自动获取模块版本

id 'org.springframework.boot' version '2.1.2.RELEASE' // Your version

当您创建自定义Repository 接口时,您只需使用类注解@Repository 对它们进行注解。 Spring-autoconfigured 扫描机制会自动拾取它们(记得将它们放在一个子包中,以 @SpringBootApplication 注释类作为根)。

然后,您可以使用构造函数注入 @Autowire 服务中的存储库或任何您想要的。

@Autowired
MyClass(final MyRepository repository) { ... }

请注意,如果您只有一个构造函数,则无需指定@Autowired 注解。

顺便说一句,Data JDBC 是一个相当新的项目。有一些限制,但我想您已经在 Data JDBC 文档中找到了这些限制。

【讨论】:

    【解决方案2】:

    需要添加哪些依赖项

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jdbc</artifactId>
    </dependency>
    

    如何将存储库 bean 注入其他 bean

    在您的控制器或服务或任何其他 bean 中,您可以自动装配此存储库:-

    private final UserRepository userRepository;
    
    @Autowired
    public UserController(UserRepository userRepository) {
        this.userRepository = userRepository;
    }
    

    如何向 Spring 指定可以找到存储库 bean 的位置

    Spring Boot 将自动扫描您的主类使用 @SpringBootApplication 定义的包(和子包)。

    另外,使用 @Repository:-

    注释您的界面
    @Repository
    interface UserRepository extends CrudRepository<User, Long> {
    

    【讨论】:

    • 依赖看起来不正确,我想使用 Spring Data JDBC,而不是 JPA
    • @Dónal &lt;dependency&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-starter-data-jdbc&lt;/artifactId&gt; &lt;/dependency&gt;
    • 你不需要用@Repository注释你的spring数据CrudRepository接口! Spring data 将为您创建实现 bean。
    • 在 Spring Data 存储库上使用 @Repository 是多余的。我也不认为这是一个好习惯或干净的代码,而是噪音。
    • @JensSchauder 很好,您在 Pivotal 工作,所以我会相信您并将您的建议视为“最佳”方式。谢谢
    猜你喜欢
    • 2018-09-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2016-08-22
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多