Getting Started

Spring Data JDBC 模块的主要优点之一是它支持多种不同的关系数据库,包括 DB2、H2、HSQLDB、MariaDB、Microsoft SQL Server、MySQL、Oracle 和 Postgres。它还提供了一个简单的编程模型,使开发者能够轻松使用熟悉和标准的 Java 语言特性来处理数据库操作。

启动工作环境的简单方法是在 Spring Tools 中或从 Spring Initializr 中创建一个基于 Spring 的项目。 首先,你需要设置一个正在运行的数据库服务器。有关如何为 JDBC 访问配置数据库的详细说明,请参阅供应商文档。

Requirements

Spring Data JDBC 需要 Spring Framework {springVersion} 及更高版本。

就数据库而言,Spring Data JDBC 需要 jdbc.dialects 来抽象针对特定于供应商的风格的常见的 SQL 功能。Spring Data JDBC 直接支持以下数据库:

  • DB2

  • H2

  • HSQLDB

  • MariaDB

  • Microsoft SQL Server

  • MySQL

  • Oracle

  • Postgres

如果你使用其他数据库,那么你的应用将无法启动。jdbc.dialects 部分包含了有关在这种情况下如何继续进行的更多详细信息。

Hello World

如何在 STS 中创建 Spring 项目:

  1. 转到文件 → 新建 → Spring 模板项目 → 简单 Spring 实用程序项目,并在出现提示时按是。然后输入一个项目和包名,例如 org.spring.jdbc.example

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

  3. 将以下内容添加到 pom.xml 文件 dependencies 元素中:[source, xml]

<dependencies>

  <!-- other dependency elements omitted -->

  <dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jdbc</artifactId>
    <version>{version}</version>
  </dependency>

</dependencies>
  1. 将 pom.xml 中 Spring 版本更改为[source, xml]

<spring.version>{springVersion}</spring-framework.version>
  1. 将以下 Spring Milestone 存储库位置添加到您的 pom.xml 中,使其位于与 &lt;dependencies/&gt; 元素相同的级别:[source, xml]

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

存储库也是 browseable here

Logging

Spring Data JDBC 自身几乎不会进行日志记录。相反,JdbcTemplate 发出 SQL 语句的机制提供了日志记录。因此,如果您想检查运行了哪些 SQL 语句,请为 Spring 的 {spring-framework-docs}/data-access.html#jdbc-JdbcTemplate[NamedParameterJdbcTemplate] 或 MyBatis 激活日志记录。

您可能还想将日志级别设置为 DEBUG 以查看一些其他信息。为此,请编辑 application.properties 文件,使文件具有以下内容:

logging.level.org.springframework.jdbc=DEBUG

Examples Repository

有一个 GitHub repository with several examples 供您下载和使用,以便了解该库的工作原理。

Configuration

Spring Data JDBC 存储库支持可以通过 Java 配置的注释激活,如下面的示例所示:

Spring Data JDBC repositories using Java configuration
@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 完成。

在此设置中,有几件事可能需要定制。

Dialects

Spring Data JDBC 使用界面 Dialect 的实现来封装特定于数据库或其 JDBC 驱动程序的行为。默认情况下,AbstractJdbcConfiguration 尝试通过获取连接并注册正确的 Dialect 从数据库配置确定方言。你可以覆盖 AbstractJdbcConfiguration.jdbcDialect(NamedParameterJdbcOperations) 来定制方言选择。

如果你使用没有可用方言的数据库,那么你的应用将无法启动。在这种情况下,你必须要求供应商提供 Dialect 实现。作为替代,你可以实现你自己的 Dialect

方言由 {spring-data-jdbc-javadoc}/org/springframework/data/jdbc/repository/config/DialectResolver.html[DialectResolver] 根据 JdbcOperations`实例解析,通常是通过检查 `Connection.getMetaData()。+ 你可以通过通过 META-INF/spring.factories`注册实现 `org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider`的类来让 Spring 自动发现你的 `JdbcDialect。`DialectResolver`使用 Spring 的 `SpringFactoriesLoader`从类路径发现方言提供程序实现。为此:

  1. Implement your own Dialect.

  2. 实现一个返回 DialectJdbcDialectProvider

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