如何阅读jOOQ指南

85 阅读2分钟

本节将帮助您在jOOQ上下文中正确解释本手册默认的一些约定和定义。

代码块

如下是代码块:

 -- A SQL code block
 SELECT 1 FROM DUAL
 // A Java code block
 for (int i = 0; i < 10; i++);
  An XML code block -->
 <hello what="world"></hello>
 # A config file code block
 org.jooq.property=value

对于案例,提供一些代码段, 这是非常有用的。 通常, 使用jOOQ, 把SQL与相关联的java代码对比是非常有用的。 使用代码段, 通常会做左右对比,左边为SQL语句,右边为相关联的java代码。 或者上下对比。

 -- In SQL:
 SELECT 1 FROM DUAL
 // Using jOOQ:
 create.selectOne().fetch()

代码块内容

代码块的内容也遵循约定。如果在任何给定的代码块旁边没有提到任何其他内容,则可以假设如下约定:

 -- SQL 约定
 ------------------
 -- 如何没有指定任何内容, 假设是使用Oracle的语法
 SELECT 1 FROM DUAL
 ​
 // Java assumptions
 // ----------------
 // 当你地看到"standalone functions", 认为他们从静态的包org.jooq.impl.DSL中导入。 
 // "DSL" 是静态的查询DSL的入口
 exists(); max(); min(); val(); inline(); // 关联的 DSL.exists(); DSL.max(); DSL.min(); etc...
 //当你看到 BOOK/Book, AUTHOR/Author 相似的实体,认为他们是静态的 (static) 从自动生成的schema导入
 BOOK.TITLE, AUTHOR.LAST_NAME // com.example.generated.Tables.BOOK.TITLE, com.example.generated.Tables.AUTHOR.LAST_NAME
 FK_BOOK_AUTHOR // com.example.generated.Keys.FK_BOOK_AUTHOR
     
 // 当你在java代码中,看到'create'被使用,则认为这是org.jooq.DSLContext 的实例。 
     
 // 为什么叫做`create`,实际上, jOOQ 的 QueryPart 在DSL对象上被创建。 
 // "create" 因此是非静态查询DSL的入口。 
     
 DSLContext create = DSL.using(connection, SQLDialect.ORACLE);

你的命名也许不同, 当然,你也可以命名createdb

执行

当你编写PL/SQL(过程化SQL语言), T-SQL或者其他过程SQL语言, SQL语句总是在分后后立即执行。 而jOOQ并不是这样的, 因为作为内部的DSL, jOOQ不能确保你的语句是完成的,直到你调用了fetch()或者execute()方法。手册试图尽可能彻底地应用fetch()和execute()。如果不是,则是隐含的执行。

 SELECT 1 FROM DUAL   -->  create.selectOne().fetch(); 
 UPDATE t SET v = 1   -->  create.update(T).set(T.V, 1).execute();

可变程度(参数数量)

jOOQ 记录(很多其他API元素)有一个可变程度N, 取值范围为1到222。API元素的可变程度用[N]表示,例如Row[N]或Record[N]。术语“可变程度(degree)”比“参数数量”更受欢迎,因为“可变程度(degree)”是SQL标准中使用的术语,而“参数数量(degree)”更常用于数学和关系理论。

设置

jOOQ允许使用org.jooq.conf.Settings配置,来覆盖运行时的行为。 如果不设置,不指定覆盖 配置。则缺省的运行时设置被使用。

样例数据库

jOOQ查询案例使用样例数据库, 如下将介绍样例数据库。