入门

一种轻松设置工作环境的方法是在 Spring ToolsSpring Initializr 中创建一个基于 Spring 的项目。

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

要求

Spring Data JDBC 需要 Spring Framework 6.1.7 及更高版本。

在数据库方面,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 元素中

  3. 将以下内容添加到 pom.xml 文件的 dependencies 元素中

    <dependencies>
    
      <!-- other dependency elements omitted -->
    
      <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-jdbc</artifactId>
        <version>3.3.0</version>
      </dependency>
    
    </dependencies>
  4. 将 pom.xml 中的 Spring 版本更改为

    <spring.version>6.1.7</spring-framework.version>
  5. 将以下 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. 实现一个返回DialectJdbcDialectProvider

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