快速开始

一种快速搭建工作环境的简便方法是在Spring Tools中创建一个基于 Spring 的项目,或通过Spring Initializr创建。spring-doc.cadn.net.cn

首先,您需要设置一个正在运行的数据库服务器。 请参阅您的数据库厂商文档,了解如何为 JDBC 访问配置数据库。spring-doc.cadn.net.cn

要求

Spring Data JDBC 需要 Spring Framework 7.0.6 及以上版本。spring-doc.cadn.net.cn

就数据库而言,Spring Data JDBC 需要一个方言(dialect),以在特定厂商的 SQL 方言之上抽象出通用的 SQL 功能。 Spring Data JDBC 直接支持以下数据库:spring-doc.cadn.net.cn

如果你使用了不同的数据库,那么你的应用程序将无法启动。 方言部分包含了在此类情况下如何操作的更多详细信息。spring-doc.cadn.net.cn

你好,世界

在 STS 中创建一个 Spring 项目:spring-doc.cadn.net.cn

  1. 转到 文件(File)→ 新建(New)→ Spring 模板项目(Spring Template Project)→ 简单 Spring 工具项目(Simple Spring Utility Project),并在提示时点击“是(Yes)”。 然后输入项目名称和包名,例如 org.spring.jdbc.examplespring-doc.cadn.net.cn

  2. 将以下内容添加到 pom.xml 文件的 dependencies 元素中:spring-doc.cadn.net.cn

    <dependencies>
    
        <!-- other dependency elements omitted -->
    
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jdbc</artifactId>
            <version>4.0.4</version>
        </dependency>
    
    </dependencies>
  3. 将 pom.xml 中 Spring 的版本更改为spring-doc.cadn.net.cn

    <spring.version>7.0.6</spring.version>
  4. 在您的 pom.xml 文件中添加以下 Spring Milestone 仓库的地址(用于 Maven),使其与 <dependencies/> 元素处于同一层级:spring-doc.cadn.net.cn

    <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 的日志记录。spring-doc.cadn.net.cn

您可能还想将日志级别设置为 DEBUG,以查看一些额外的信息。 为此,请编辑 application.properties 文件,使其包含以下内容:spring-doc.cadn.net.cn

logging.level.org.springframework.jdbc=DEBUG

示例仓库

有一个GitHub 仓库,其中包含多个示例,您可以下载并试用,以了解该库的工作原理。spring-doc.cadn.net.cn

配置

Spring Data JDBC 仓库支持可以通过注解在 Java 配置中启用,如下例所示:spring-doc.cadn.net.cn

使用 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-doc.cadn.net.cn

通过使用 Spring Boot,此配置可以进一步简化。 在依赖中引入 starter DataSource 后,只需提供一个 spring-boot-starter-data-jdbc 即可。 其余所有工作均由 Spring Boot 自动完成。spring-doc.cadn.net.cn

在这个设置中,有一些内容可能需要自定义。spring-doc.cadn.net.cn

方言

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

如果你使用的数据库没有可用的方言(dialect),那么你的应用程序将无法启动。 在这种情况下,你需要联系你的数据库提供商,要求他们提供一个 JdbcDialect 实现。 或者,你也可以自己实现一个 JdbcDialectspring-doc.cadn.net.cn

方言通过以下方式解析:DialectResolver来自一个JdbcOperations实例,通常通过检查Connection.getMetaData().
您可以让 Spring 自动发现您的JdbcDialect通过注册一个实现org.springframework.data.jdbc.core.dialect.DialectResolver$JdbcDialectProvider通过META-INF/spring.factories. DialectResolver使用 Spring 从类路径中发现方言提供者实现SpringFactoriesLoader. 为此:spring-doc.cadn.net.cn

  1. 实现您自己的 JdbcDialectspring-doc.cadn.net.cn

  2. 实现一个返回 JdbcDialectProviderJdbcDialectspring-doc.cadn.net.cn

  3. 通过创建来注册提供者spring.factories资源位于META-INF并通过添加一行来执行注册
    org.springframework.data.jdbc.core.dialect.DialectResolver$JdbcDialectProvider=<fully qualified name of your JdbcDialectProvider>`.spring-doc.cadn.net.cn