跳到主要内容

快速上手

DeepSeek V3 中英对照 Getting Started

Spring ToolsSpring Initializr 中创建一个基于 Spring 的项目是快速搭建工作环境的简便方法。

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

需求

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

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

  • DB2

  • H2

  • HSQLDB

  • MariaDB

  • Microsoft SQL Server

  • MySQL

  • Oracle

  • Postgres

如果您使用了不同的数据库,您的应用程序将无法启动。dialect 部分详细说明了在这种情况下该如何操作。

Hello World

要在 STS 中创建 Spring 项目:

  1. 转到 文件 → 新建 → Spring 模板项目 → 简单的 Spring 工具项目,并在提示时点击 。然后输入项目名称和包名称,例如 org.spring.jdbc.example

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

    <dependencies>

    <!-- 其他依赖元素省略 -->

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

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

    <spring.version>6.2.3</spring.version>
    xml
  4. pom.xml 中添加以下 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 的 NamedParameterJdbcTemplateMyBatis 的日志记录。

你也可以将日志级别设置为 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-jdbcEmbeddedDatabaseBuilder API 设置了一个嵌入式 HSQL 数据库。然后,DataSource 被用来设置 NamedParameterJdbcOperationsTransactionManager。我们最终通过使用 @EnableJdbcRepositories 激活了 Spring Data JDBC 仓库。如果没有配置基础包,它将使用配置类所在的包。继承 AbstractJdbcConfiguration 确保各种 bean 被注册。重写其方法可用于自定义设置(见下文)。

通过使用 Spring Boot,这个配置可以进一步简化。一旦在依赖中包含 spring-boot-starter-data-jdbc 启动器,仅需一个 DataSource 即可。其余的一切都由 Spring Boot 自动完成。

在此设置中,您可能想要自定义一些内容。

方言

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

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

提示

方言(Dialects)是通过 JdbcOperations 实例由 DialectResolver 解析的,通常是通过检查 Connection.getMetaData() 来实现的。+ 你可以让 Spring 自动发现你的 JdbcDialect,方法是通过 META-INF/spring.factories 注册一个实现了 org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider 的类。DialectResolver 使用 Spring 的 SpringFactoriesLoader 从类路径中发现方言提供者实现。具体步骤如下:

  1. 实现你自己的 Dialect

  2. 实现一个 JdbcDialectProvider,返回该 Dialect

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