Jooq

Spring Boot + jOOQ 教程 - 5:多对多关系检索

上一教程 介绍了如何使用 jOOQ 检索一对多关系的记录。本文将带你了解如何使用 jOOQ 检索多对多关系的记录。 你可以通过 Github 获取到完整的源码。 在示例数据库中,有 bookmarks(书签)表和 tags(标签)表。每个书签可以关联多个标签,反之亦然,因此 bookmarks 表和 tags 表之间存在多对多的关系。 让我们看看如何获取书签列表以及与之关联的标签 首先,创建 BookmarkWithTags record。 package com.sivalabs.bookmarks.models; import java.util.List; public record BookmarkWithTags(Long id, String title, String url, List<TagInfo> tags) { public record TagInfo (Long id, String name){} } 使用 MULTISET Value 构造器获取多对多关系 使用 jOOQ 的 MULTISET Value Constructor 来获取书签列表和标签。 实现获取书签和标签,如下: package com.sivalabs.bookmarks.repositories; import com.sivalabs.bookmarks.models.BookmarkWithTags; import org.jooq.DSLContext; import org.springframework.stereotype.Repository; import java.util.List; import static com.sivalabs.bookmarks.jooq.Tables.BOOKMARK_TAG; import static com.

Spring Boot + jOOQ 教程 - 4:一对多关系检索

上一教程 中介绍了如何使用 jOOQ 检索一对一(*One-to-One)关系的记录。本文将带你了解如何使用 jOOQ 检索一对多(One-to-Many)关系的记录。 你可以在 Github 获取完整的源码。 在示例数据库中,有 users(用户)表和 bookmarks(书签)表。每个用户可以创建多个书签,因此 users 表和 bookmarks 表之间是一对多的关系。 让我们看看如何获取用户详细信息以及用户创建的书签。 首先,创建 UserWithBookmarks Record。 package com.sivalabs.bookmarks.models; import java.util.List; public record UserWithBookmarks(Long id, String name, String email, List<BookmarkInfo> bookmarks) { public record BookmarkInfo (Long id, String title, String url){} } 使用 MULTISET Value 构造器获取一对多关系 使用 jOOQ 的 MULTISET Value 构造函数来获取用户创建的书签列表。有关 MULTISET Value 构造函数的更多详情,请访问:https://www.jooq.org/doc/latest/manual/sql-building/column-expressions/multiset-value-constructor/。 此外,强烈推荐你阅读《jOOQ 3.15 的新 Multiset Operator 将如何改变你对 SQL 的看法》一文。 实现获取用户详细信息以及该用户创建的书签。 @Repository public class UserRepository { .

Spring Boot + jOOQ 教程 - 3:一对一关系检索

上一教程 介绍了如何使用 jOOQ 实现基本的 CRUD 操作。本文将带你了解如何使用 jOOQ 检索一对一(One-to-One)关系的记录。 你可以在 Github 上找到完整的源码。 一般来说,在显示记录列表时,只会显示记录的最基本的信息,当点击记录时,才会显示记录的完整信息。 在本示例应用中,用户列表只显示 id、name 和 email 基本信息。当点击详情时,才显示包含用户偏好(Preferences)的完整信息。 更新 findUserById() 方法,以获取用户偏好设置。 首先,创建 UserPreferences record。 public record UserPreferences(Long id, String theme, String language) { } 更新 User 类,使其包含 UserPreferences。 package com.sivalabs.bookmarks.models; public record User ( Long id, String name, String email, String password, UserPreferences preferences ) { public User(Long id, String name, String email, String password) { this(id, name, email, password, null); } public static User create(Long id, String name, String email, String password) { return new User(id, name, email, password, null); } } 在 SQL 中,可以使用 LEFT OUTER JOIN 查询获取关联数据,如下所示:

Spring Boot + jOOQ 教程 - 2:实现 CRUD 操作

在 上一教程 中,介绍了如何使用 testcontainers-jooq-codegen-maven-plugin 生成 jOOQ 代码,以及如何使用 jOOQ DSL 执行 SQL 查询。 本文将带你了解如何使用 jOOQ 对 USERS 表执行基本的 CRUD(创建、读取、更新、删除)操作。 你可以在 Github 上获取到完整的源码。 findAllUsers() 首先,从 USERS 表中获取所有用户。假设只检索 USERS 表中的 id、name、email 和 password 列。 创建 User record,如下: package com.sivalabs.bookmarks.models; public record User(Long id, String name, String email, String password) { } 在 UserRepository 类中实现 findAllUsers() 方法,如下: package com.sivalabs.bookmarks.repositories; import com.sivalabs.bookmarks.models.User; import org.jooq.DSLContext; import org.jooq.impl.SQLDataType; import org.springframework.stereotype.Repository; import java.util.List; import static com.sivalabs.bookmarks.jooq.tables.Users.USERS; import static org.

Spring Boot + jOOQ 教程 - 1:入门

jOOQ 是一个 Java 持久库,提供用于编写类型安全 SQL 查询的 SQL DSL。它支持大多数流行的数据库,如 MySQL、PostgreSQL、Oracle、SQL Server 等。 本文将带你了解如何在 Spring Boot 中使用 jOOQ 实现持久层。JOOQ 也可以在 Kotlin、Scala 等其他基于 JVM 的语言中使用。 本系列教程中,将带你学习如何在 Spring Boot 中使用 JOOQ 实现: 基本的 CRUD 操作 一对一关系检索 一对多关系检索 多对多关系检索 你可以在 Github 获取完整的源码。 前提条件 安装 JDK 17 或更高版本 安装任何容器运行时,如 Docker Desktop、OrbStack 等。 注意:jOOQ 不需要 Docker。只是使用 Testcontainers 进行 jOOQ 代码生成和测试需要一个容器运行时。 示例数据库 本教程使用下列示例数据库。 创建 Spring Boot 应用 使用 Spring Initializr 创建一个 Spring Boot 项目。选择 JOOQ Access Layer、Flyway Migration、PostgreSQL Driver 和 Testcontainers。