快速上手
在 Spring Tools 或 Spring 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 项目:
-
转到 文件 → 新建 → Spring 模板项目 → 简单的 Spring 工具项目,并在提示时点击 是。然后输入项目名称和包名称,例如
org.spring.jdbc.example
。 -
在
pom.xml
文件的dependencies
元素中添加以下内容:<dependencies>
<!-- 其他依赖元素省略 -->
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jdbc</artifactId>
<version>3.4.3</version>
</dependency>
</dependencies> -
将
pom.xml
中的 Spring 版本更改为:<spring.version>6.2.3</spring.version>
-
在
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>
该仓库也可以在此处浏览。
日志记录
Spring Data JDBC 自身几乎不进行日志记录。相反,JdbcTemplate
用于执行 SQL 语句的机制提供了日志记录功能。因此,如果你想检查正在运行的 SQL 语句,请激活 Spring 的 NamedParameterJdbcTemplate 或 MyBatis 的日志记录。
你也可以将日志级别设置为 DEBUG
以查看一些额外信息。为此,编辑 application.properties
文件,使其包含以下内容:
logging.level.org.springframework.jdbc=DEBUG
示例代码库
这里有一个 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);
}
}
@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-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
从类路径中发现方言提供者实现。具体步骤如下:
-
实现你自己的
Dialect
。 -
实现一个
JdbcDialectProvider
,返回该Dialect
。 -
在
META-INF
下创建一个spring.factories
资源,并通过添加一行
org.springframework.data.jdbc.repository.config.DialectResolver$JdbcDialectProvider=<你的 JdbcDialectProvider 的完全限定名>
来注册该提供者。