1. 概述
本文是《jOOQ 與 Spring 入門》教程的後續內容,介紹瞭如何在 Spring Boot 應用中使用 jOOQ。
如果您尚未完成該教程,請先閲讀它,並按照第 2 節 Maven 依賴項和第 3 節代碼生成部分中的説明進行操作。這將生成 Java 類,這些類代表樣本數據庫中的表,包括 <em >Author</em >, <em >Book</em > 和 <em >AuthorBook</em >。
2. Maven 配置
除了前一教程中提到的依賴項和插件,還需要在 Maven POM 文件中包含其他組件,才能使 jOOQ 與 Spring Boot 協同工作。
2.1 依賴管理
使用 Spring Boot 的最常見方法是繼承自 spring-boot-starter-parent 項目,並在 parent 元素中聲明它。然而,這種方法並不總是合適的,因為它會強制用户遵循繼承鏈,而這在許多情況下可能不是用户想要的。
本教程採用另一種方法:將依賴管理委託給 Spring Boot。要實現這一點,只需將以下 dependencyManagement 元素添加到 POM 文件中:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>3.2.2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>2.2. 依賴關係
為了使 Spring Boot 控制 jOOQ,需要聲明對 spring-boot-starter-jooq 藝術品的依賴:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jooq</artifactId>
<version>3.2.2</version>
</dependency>請注意,本文重點介紹 jOOQ 的開源發行版。如果您想使用商業發行版,請查看官方博客上關於 使用 jOOQ 商業發行版與 Spring Boot 的指南。
3. Spring Boot 配置
3.1. 初始啓動配置
在深入探討 jOOQ 支持之前,我們將使用 Spring Boot 進行準備工作。
首先,我們將利用 Spring Boot 中的持久化支持和改進,以及標準 application.properties 文件中的數據訪問信息。 這樣,我們就可以避免定義 Bean 並通過單獨的屬性文件進行配置。
我們將在此處添加 URL 和憑據,以定義我們的嵌入式 H2 數據庫:
spring.datasource.url=jdbc:h2:~/jooq
spring.datasource.username=sa
spring.datasource.password=我們還將定義一個簡單的 Boot 應用:
@SpringBootApplication
@EnableTransactionManagement
public class Application {
}我們將會保留此項簡單空置,並將所有其他 Bean 聲明定義在另一個配置類中——InitialConfiguration。
3.2. Bean 配置
現在,讓我們定義這個 InitialConfiguration 類:
@Configuration
public class InitialConfiguration {
// Other declarations
}Spring Boot 自動生成並配置了 <em >dataSource</em> Bean,基於在 <em >application.properties</em> 文件中設置的屬性。因此,我們無需手動註冊它。以下代碼演示瞭如何將自動配置的 <em >DataSource</em> Bean 注入到字段中,並展示了該 Bean 的使用方法:
@Autowired
private DataSource dataSource;
@Bean
public DataSourceConnectionProvider connectionProvider() {
return new DataSourceConnectionProvider
(new TransactionAwareDataSourceProxy(dataSource));
}由於 Spring Boot 自動創建並配置了名為 transactionManager 的 Bean,因此我們就不需要在本教程中聲明任何其他類型的 DataSourceTransactionManager Bean,以利用 Spring 事務支持。
與前一教程中 PersistenceContext 類創建 DSLContext Bean 的方式相同。
@Bean
public DefaultDSLContext dsl() {
return new DefaultDSLContext(configuration());
}最後,需要提供一個 配置 實現給 DSLContext。由於 Spring Boot 通過 classpath 上 H2 文件的存在來識別使用的 SQL 方言,因此無需配置方言:
public DefaultConfiguration configuration() {
DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
jooqConfiguration.set(connectionProvider());
jooqConfiguration
.set(new DefaultExecuteListenerProvider(exceptionTransformer()));
return jooqConfiguration;
}4. 使用 Spring Boot 與 jOOQ
為了使 Spring Boot 對 jOOQ 的支持演示更易於理解,本教程的前置測試用例被重用,並對其類級別註解進行了少量修改:
@SpringApplicationConfiguration(Application.class)
@Transactional("transactionManager")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringBootTest {
// Other declarations
}顯然,Spring Boot 採用 @ContextConfiguration 註解的方式並不合適,而是利用 @SpringApplicationConfiguration 註解,以及 SpringApplicationContextLoader 上下文加載器來測試應用程序。
插入、更新和刪除數據的測試方法與上一教程完全相同。請參閲該文章第 5 節“使用 jOOQ 與 Spring”,以獲取更多信息。新的配置下,所有測試都應成功執行,證明 jOOQ 完全由 Spring Boot 支持。
5. 結論
本教程深入探討了 jOOQ 與 Spring 的使用方法。它介紹瞭如何利用 jOOQ,使 Spring Boot 應用程序以類型安全的方式與數據庫進行交互。