跳到主要内容

入门

Doubao 中英对照 Getting Started

初始化工作环境的一个简单方式是在 Spring Tools 中或通过 Spring Initializr 创建一个基于 Spring 的项目。

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

要求​

Spring Data JDBC 需要 Spring Framework 7.0.9 或更高版本。

在数据库方面,Spring Data JDBC 需要一个方言来对各厂商特有的 SQL 风味抽象出通用的 SQL 功能。Spring Data JDBC 直接支持以下数据库:

  • DB2

  • H2

  • HSQLDB

  • MariaDB

  • Microsoft SQL Server

  • MySQL

  • Oracle

  • PostgreSQL

如果您使用的是其他数据库,您的应用程序将无法启动。方言部分包含了在这种情况下应如何处理的更多细节。

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>4.1.1</version>
    </dependency>

    </dependencies>
    xml
  3. 将 pom.xml 中的 Spring 版本更改为:

    <spring.version>7.0.9</spring.version>
    xml
  4. 在您的 pom.xml 中为 Maven 添加以下 Spring Milestone 仓库的位置,使其与 <dependencies/> 元素处于同一层级:

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

该仓库也可以在此浏览。

日志记录​

Spring Data JDBC 自身几乎不进行日志记录。相反,是 JdbcTemplate 执行 SQL 语句的机制提供了日志记录。因此,如果您想查看运行了哪些 SQL 语句,请为 Spring 的 NamedParameterJdbcTemplate 或 MyBatis 启用日志记录。

您可能还希望将日志级别设置为 DEBUG 以查看更多信息。为此,请编辑 application.properties 文件,使其包含以下内容:

logging.level.org.springframework.jdbc=DEBUG
none

示例仓库​

有一个包含若干示例的 GitHub 仓库,您可以下载并动手尝试,以感受该库的工作方式。

配置​

Spring Data JDBC 仓库的支持可以通过注解以 Java 配置的方式启用,如下例所示:

@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);
}
}
java
  • @EnableJdbcRepositories 为派生自 Repository 的接口创建实现。

  • AbstractJdbcConfiguration 提供 Spring Data JDBC 所需的各种默认 bean。

  • 创建一个连接到数据库的 DataSource。以下两个 bean 方法需要它。

  • 创建 Spring Data JDBC 用于访问数据库的 NamedParameterJdbcOperations。

  • Spring Data JDBC 利用 Spring JDBC 提供的事务管理。

前述示例中的配置类使用 spring-jdbc 的 EmbeddedDatabaseBuilder API 设置了一个内嵌的 HSQL 数据库。然后用 DataSource 来设置 NamedParameterJdbcOperations 和 TransactionManager。最后我们通过 @EnableJdbcRepositories 启用 Spring Data JDBC 仓库。如果未配置基础包,它将使用配置类所在的包。继承 AbstractJdbcConfiguration 可确保注册各种 bean。覆盖其方法可用于自定义设置(见下文)。

使用 Spring Boot 可以进一步简化该配置。对于 Spring Boot,一旦在依赖中包含了 starter spring-boot-starter-data-jdbc,一个 DataSource 就足够了。其他一切都由 Spring Boot 完成。

在这个设置中,有几处可能需要自定义。

方言​

Spring Data JDBC 使用 JdbcDialect 接口的实现来封装特定于某个数据库或其 JDBC 驱动程序的行为。默认情况下,AbstractJdbcConfiguration 会通过获取一个连接并注册正确的 JdbcDialect,从数据库配置中判断方言。您可以覆盖 AbstractJdbcConfiguration.jdbcDialect(NamedParameterJdbcOperations) 来自定义方言选择。

如果您使用的数据库没有可用的方言,那么您的应用程序将无法启动。在这种情况下,您需要请求数据库厂商提供 JdbcDialect 实现。或者,您也可以实现自己的 JdbcDialect。

提示

方言由 DialectResolver 从 JdbcOperations 实例解析,通常通过检查 Connection.getMetaData()。
您可以通过 META-INF/spring.factories 注册一个实现了 org.springframework.data.jdbc.core.dialect.DialectResolver$JdbcDialectProvider 的类,让 Spring 自动发现您的 JdbcDialect。DialectResolver 使用 Spring 的 SpringFactoriesLoader 从 classpath 中发现方言提供器实现。为此:

  1. 实现您自己的 JdbcDialect。

  2. 实现一个返回该 JdbcDialect 的 JdbcDialectProvider。

  3. 在 META-INF 下创建一个 spring.factories 资源来注册该提供器,并通过添加一行
    org.springframework.data.jdbc.core.dialect.DialectResolver$JdbcDialectProvider=<您的 JdbcDialectProvider 的全限定名> 来完成注册。