入门

一种轻松引导设置工作环境的方法是在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. 转到 文件 → 新建 → Spring 模板项目 → 简单 Spring 实用程序项目,并在出现提示时按“是”。然后输入项目和包名称,例如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 里程碑存储库的以下位置添加到您的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()来实现。+您可以通过注册实现org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider的类(通过META-INF/spring.factories),让Spring自动发现您的JdbcDialectDialectResolver使用Spring的SpringFactoriesLoader从类路径中发现方言提供程序实现。为此

  1. 实现您自己的Dialect

  2. 实现一个返回DialectJdbcDialectProvider

  3. 通过在META-INF下创建一个spring.factories资源来注册提供程序,并通过添加一行进行注册
    org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=<您的JdbcDialectProvider的全限定名>