入门

启动工作环境的一个简单方法是在 Spring Tools 中或从 Spring Initializr 创建一个基于 Spring 的项目。

首先,您需要设置一个正在运行的数据库服务器。请参阅您的供应商文档,了解如何配置数据库以进行 JDBC 访问。

要求

Spring Data JDBC 需要 Spring Framework 6.2.6 及以上版本。

在数据库方面,Spring Data JDBC 需要一个 方言(dialect) 来抽象特定于供应商的 SQL 功能。Spring Data JDBC 直接支持以下数据库:

  • DB2

  • H2

  • HSQLDB

  • MariaDB

  • Microsoft SQL Server

  • MySQL

  • Oracle

  • Postgres

如果您使用不同的数据库,您的应用程序将无法启动。 方言(dialect) 部分包含有关在这种情况下如何继续操作的更多详细信息。

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.5</version>
      </dependency>
    
    </dependencies>
  3. 更改 pom.xml 中的 Spring 版本为

    <spring.version>6.2.6</spring.version>
  4. 将 Spring Milestone Maven 仓库的以下位置添加到您的 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,一旦依赖中包含 starter 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. 实现一个返回 DialectJdbcDialectProvider

  3. 通过在 META-INF 下创建一个 spring.factories 资源并添加一行来注册提供程序
    org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=<fully qualified name of your JdbcDialectProvider>