JOOQ 的使用 - 执行 SQL 语句 (SQL Executor)
jOOQ 是基于 JDBC 之上的一个抽象层,提供了多种多样的模型来与关系型数据库进行互操作;其使用与 mybatis 和 Hibernate 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 。
以上。