開始使用

要快速啟動並建立工作環境,一個簡單的方法是在 Spring ToolsSpring Initializr 中建立一個基於 Spring 的專案。

首先,您需要設定一個正在運行的資料庫伺服器。請參考您的供應商文件,以了解如何設定您的資料庫以進行 JDBC 存取。

需求

Spring Data JDBC 需要 Spring Framework 6.2.0 或以上版本。

在資料庫方面,Spring Data JDBC 需要一個 方言,以抽象化跨供應商特定風格的通用 SQL 功能。Spring Data JDBC 包含對以下資料庫的直接支援

  • DB2

  • H2

  • HSQLDB

  • MariaDB

  • Microsoft SQL Server

  • MySQL

  • Oracle

  • Postgres

如果您使用不同的資料庫,則您的應用程式將無法啟動。方言章節包含在這種情況下如何處理的更多詳細資訊。

Hello World

要在 STS 中建立 Spring 專案

  1. 前往 File → New → Spring Template Project → Simple Spring Utility Project,並在出現提示時按 Yes。然後輸入專案和套件名稱,例如 org.spring.jdbc.example

  2. 將以下內容添加到 pom.xml 檔案的 dependencies 元素中

    <dependencies>
    
      <!-- other dependency elements omitted -->
    
      <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jdbc</artifactId>
        <version>3.4.0</version>
      </dependency>
    
    </dependencies>
  3. 將 pom.xml 中 Spring 的版本更改為

    <spring.version>6.2.0</spring.version>
  4. 將以下 Spring Milestone 儲存庫的位置添加到您的 pom.xml 中,使其與您的 <dependencies/> 元素位於同一層級

    <repositories>
      <repository>
        <id>spring-milestone</id>
        <name>Spring Maven MILESTONE Repository</name>
        <url>https://repo.spring.io/milestone</url>
      </repository>
    </repositories>

該儲存庫也可以在此處瀏覽

日誌記錄

Spring Data JDBC 本身幾乎不進行日誌記錄。相反地,JdbcTemplate 發出 SQL 語句的機制提供了日誌記錄。因此,如果您想檢查運行的 SQL 語句,請為 Spring 的 NamedParameterJdbcTemplateMyBatis 啟用日誌記錄。

您可能還想將日誌記錄等級設定為 DEBUG 以查看一些額外資訊。為此,請編輯 application.properties 檔案以包含以下內容

logging.level.org.springframework.jdbc=DEBUG

範例儲存庫

有一個 GitHub 儲存庫,其中包含一些範例,您可以下載並試用,以了解該程式庫的工作方式。

組態

Spring Data JDBC 儲存庫支援可以通過 Java 組態中的註解來啟用,如下例所示

使用 Java 組態的 Spring Data JDBC 儲存庫
@Configuration
@EnableJdbcRepositories                                                                (1)
class ApplicationConfig extends AbstractJdbcConfiguration {                            (2)

    @Bean
    DataSource dataSource() {                                                         (3)

        EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
        return builder.setType(EmbeddedDatabaseType.HSQL).build();
    }

    @Bean
    NamedParameterJdbcOperations namedParameterJdbcOperations(DataSource dataSource) { (4)
        return new NamedParameterJdbcTemplate(dataSource);
    }

    @Bean
    TransactionManager transactionManager(DataSource dataSource) {                     (5)
        return new DataSourceTransactionManager(dataSource);
    }
}
1 @EnableJdbcRepositories 為衍生自 Repository 的介面建立實作
2 AbstractJdbcConfiguration 提供了 Spring Data JDBC 所需的各種預設 bean
3 建立一個連接到資料庫的 DataSource。以下兩個 bean 方法需要此項。
4 建立 Spring Data JDBC 用於存取資料庫的 NamedParameterJdbcOperations
5 Spring Data JDBC 利用 Spring JDBC 提供的交易管理。

前面範例中的組態類別通過使用 spring-jdbcEmbeddedDatabaseBuilder API 設定嵌入式 HSQL 資料庫。然後,DataSource 用於設定 NamedParameterJdbcOperationsTransactionManager。我們最終通過使用 @EnableJdbcRepositories 啟用了 Spring Data JDBC 儲存庫。如果未組態基礎套件,它將使用組態類別所在的套件。擴展 AbstractJdbcConfiguration 可確保註冊各種 bean。覆寫其方法可用於自訂設定(請參閱下文)。

通過使用 Spring Boot 可以進一步簡化此組態。使用 Spring Boot,一旦啟動器 spring-boot-starter-data-jdbc 包含在依賴項中,DataSource 就足夠了。其他一切都由 Spring Boot 完成。

在此設定中,可能有一些事項需要自訂。

方言

Spring Data JDBC 使用介面 Dialect 的實作來封裝特定於資料庫或其 JDBC 驅動程式的行為。默認情況下,AbstractJdbcConfiguration 嘗試通過獲取連接並註冊正確的 Dialect 從資料庫組態中確定方言。您可以覆寫 AbstractJdbcConfiguration.jdbcDialect(NamedParameterJdbcOperations) 以自訂方言選擇。

如果您使用的資料庫沒有可用的方言,則您的應用程式將無法啟動。在這種情況下,您必須要求您的供應商提供 Dialect 實作。或者,您可以實作自己的 Dialect

方言由 DialectResolverJdbcOperations 實例解析,通常通過檢查 Connection.getMetaData()。+ 您可以通過 META-INF/spring.factories 註冊一個實作 org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider 的類別,讓 Spring 自動發現您的 JdbcDialectDialectResolver 使用 Spring 的 SpringFactoriesLoader 從類別路徑中發現方言提供者實作。為此

  1. 實作您自己的 Dialect

  2. 實作一個 JdbcDialectProvider,返回 Dialect

  3. 通過在 META-INF 下建立 spring.factories 資源來註冊提供者,並通過添加一行來執行註冊
    org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=<您的 JdbcDialectProvider 的完整限定名稱>