jOOQ 是基于 JDBC 之上的一个抽象层,提供了多种多样的模型来与关系型数据库进行互操作;其使用与 mybatisHibernate ORM 不同的思路来实现 对象关系映射 ORM

本篇主要介绍基于 jOOQ 的 SQL 命令执行 (SQL Executor) 。

jOOQ 可以用来执行裸 SQL 命令语句,也可以用来执行带参数绑定的 SQL 命令语句(只要你的 SQL 正确的话)。

Maven 中使用 jOOQ,需要在 pom.xml 文件中添加以下依赖:

<dependency>
    <groupId>org.jooq</groupId>
    <artifactId>jooq</artifactId>
    <version>${jooq_version}</version>
</dependency>

截至 2019-10-21,jOOQ 的最新版本是 3.12.1

以下所有的用例都基于 JUnit 5 框架,测试用的数据库提供方为 H2

公共代码:

private DSLContext dsl;

@BeforeEach
void setUp(@TempDir final Path dir) throws Exception {
    final String url = "jdbc:h2:" + dir.toString() + "/test.db";
    final Connection connection = DriverManager.getConnection(url, "sa", "");

    dsl = DSL.using(connection, SQLDialect.H2);
}

🔗create table

dsl.execute("create table \"user\"(\n"
            + "\"id\" bigint not null auto_increment, "
            + "\"name\" varchar(100) not null, "
            + "\"created_at\" timestamp not null, "
            + "primary key (\"id\")"
            + ");");

🔗select

final Result<Record> fetch = dsl.fetch("select * from \"user\"");

🔗insert

dsl.execute("insert into \"user\" (\"name\", \"created_at\") "
            + "values (cast(? as varchar), cast(? as timestamp))",
        n, OffsetDateTime.now())

🔗update

dsl.execute("update \"user\" "
            + "set \"name\" = 'Elvis Wang', "
            + "    \"created_at\" = timestamp '2019-10-17 19:46:58.456' "
            + "where \"id\" = ?", 2);

🔗delete

dsl.execute("delete from \"user\" where \"id\" = ?", 2);

完整的示例代码可以参见 jOOQ Usecases

想了解更多的 jOOQ 用法,可以阅读 官方文档


以上。