将 jOOQ 与 Spring 的 JdbcTemplate 一起使用
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
很多人都在他们的项目中使用 Spring 强大的 org.springframework.jdbc.core.JdbcTemplate 来简化常见的 JDBC 交互模式,例如
- 变量绑定
- 结果映射
- 异常处理
当向广泛使用 JdbcTemplate 的项目中添加 jOOQ 时,务实的第一步是将 jOOQ 用作 SQL 构建器,并将查询字符串和绑定变量传递给 JdbcTemplate 以执行。 例如,您可能有以下类来存储作者及其在我们商店中的书籍数量
public class AuthorAndBooks {
public final String firstName;
public final String lastName;
public final int books;
public AuthorAndBooks(String firstName, String lastName, int books) {
this.firstName = firstName;
this.lastName = lastName;
this.books = books;
}
}
然后你可以编写以下代码
// The jOOQ part stays the same as always:
Book b = BOOK.as("b");
Author a = AUTHOR.as("a");
BookStore s = BOOK_STORE.as("s");
BookToBookStore t = BOOK_TO_BOOK_STORE.as("t");
ResultQuery<Record3<String, String, Integer>> query =
create.select(a.FIRST_NAME, a.LAST_NAME, countDistinct(s.NAME))
.from(a)
.join(b).on(b.AUTHOR_ID.equal(a.ID))
.join(t).on(t.BOOK_ID.equal(b.ID))
.join(s).on(t.BOOK_STORE_NAME.equal(s.NAME))
.groupBy(a.FIRST_NAME, a.LAST_NAME)
.orderBy(countDistinct(s.NAME).desc());
// But instead of executing the above query, we'll send the SQL string and the bind values to JdbcTemplate:
JdbcTemplate template = new JdbcTemplate(dataSource);
List<AuthorAndBooks> result = template.query(
query.getSQL(),
(r, i) -> new AuthorAndBooks(
r.getString(1),
r.getString(2),
r.getInt(3)
),
query.getBindValues().toArray()
);
这种方法可以帮助您逐步从使用 JdbcTemplate 迁移到仅 jOOQ 的执行模型。
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!