入门

设置工作环境的简单方法是在 Spring Tools 中或从 Spring Initializr 创建一个基于 Spring 的项目。

首先,您需要设置一个运行中的数据库服务器。有关如何配置数据库以进行 JDBC 访问,请参阅您的供应商文档。

要求

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

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

  • DB2

  • H2

  • HSQLDB

  • MariaDB

  • Microsoft SQL Server

  • MySQL

  • Oracle

  • PostgreSQL

如果您使用不同的数据库,您的应用程序将无法启动。方言 部分包含有关在这种情况下如何操作的更多详细信息。

Hello World

在 STS 中创建 Spring 项目

  1. 转到“文件”→“新建”→“Spring 模板项目”→“简单 Spring 实用工具项目”,并在提示时按“是”。然后输入项目和包名,例如 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.0.0</version>
        </dependency>
    
    </dependencies>
  3. 将 pom.xml 中的 Spring 版本更改为

    <spring.version>7.0.0</spring.version>
  4. 将 Maven 的 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 使用 JdbcDialect 接口的实现来封装特定于数据库或其 JDBC 驱动程序的行为。默认情况下,AbstractJdbcConfiguration 尝试通过获取连接并注册正确的 JdbcDialect 来从数据库配置中确定方言。您可以覆盖 AbstractJdbcConfiguration.jdbcDialect(NamedParameterJdbcOperations) 以自定义方言选择。

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

方言由 DialectResolverJdbcOperations 实例解析,通常通过检查 Connection.getMetaData()
您可以通过 META-INF/spring.factories 注册实现 org.springframework.data.jdbc.core.dialect.DialectResolver$JdbcDialectProvider 的类,让 Spring 自动发现您的 JdbcDialectDialectResolver 使用 Spring 的 SpringFactoriesLoader 从类路径发现方言提供程序实现。为此

  1. 实现您自己的 JdbcDialect

  2. 实现一个返回 JdbcDialectJdbcDialectProvider

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

© . This site is unofficial and not affiliated with VMware.