我正在评估我们是否可以为我们的项目从普通JDBC迁移到jOOQ。其中大部分看起来很有希望,但我现在想知道一个特定的流:嵌套行。让我解释一下。
假设您有以下两张表:
class(id, name)
student(id, name, class_id)
(我们假设一个学生只能是一个班级的一员。)
让我们为这些表创建一个响应类型。我将在下面的查询中使用这些。
create type type_student as(id integer, name text);
create type type_class as(id integer, name text, students type_student[]);
现在让我们使用嵌套行获取所有带有学生的类:
select row(class.id, class.name, array
(
select row(student.id, student.name)::type_student
from student
where student.class_id = class.id
))::type_class
from class
一种有用的变体是仅在数组中使用嵌套行:
select class.id, class.name, array
(
select row(student.id, student.name)::type_student
from student
where student.class_id = class.id
) as students
from class
我想知道jOOQ是否有一种优雅的方法来解析包含嵌套行的结果?
是的,它可以:https://www.jooq.org/doc/latest/manual/sql-building/table-expressions/nested-selects/
Field<Object> records =
create.select(student.id, student.name)
.from(student)
.where(student.class_id.eq(class.id)
.asField("students");
create.select(class.id, class.name, array, records)
.from(class)
.fetch();
上面的例子可能不会直接起作用,因为我没有尝试过,但只是想给出一个大致的想法。
注意:对象记录不是单独执行的。当在第二个语句中调用fetch
时,JOOQ应该在内部创建一个SQL语句。
你使用“parse”这个词可能意味着几件事,如果有人发现这个问题是在寻找“jOOQ”/“parse”/“row”,我会一一回答。
尚未(截至jOOQ 3.10和3.11)。jOOQ附带了一个SQL解析器,可以解析(几乎)任何可以使用jOOQ API表示的内容。这有多种好处,包括:
不幸的是,它还不能解析投影中的行值表达式,即在SELECT子句中。
是的,您可以使用各种DSL使用它们。row()
构造函数,主要用于谓词,也用于投影,方法是使用DSL将它们包装在字段中。在jOOQ 3.11中,这仍然是一个实验,因为PostgreSQL本身有很多边缘情况,与什么是允许的,什么是不允许的有关。但原则上,像你这样的查询应该是可能的
PostgreSQL支持这些匿名记录
类型,以及命名的“复合”类型。及其数组。以及数组和复合类型的嵌套。如果类型信息对jOOQ可用,即如果您使用代码生成器,jOOQ可以序列化和反序列化这些类型。例如,如果您的查询存储为视图
create view test as
select row(class.id, class.name, array
(
select row(student.id, student.name)::type_student
from student
where student.class_id = class.id
))::type_class
from class
然后,代码生成器将产生适当的类型,包括:
TypeClassRecord
可以按预期序列化。原则上,这在没有代码生成器的情况下也是可能的,但您必须自己手动创建上述类型,所以为什么不直接使用代码生成器呢。
问题内容: 我必须与API进行交互,并且响应格式(根据我的阅读)似乎结构不良。我发现一个Google 网上论坛在这里回答了一个类似的问题,但是我在实现Response类来处理Gson.fromJson时遇到了麻烦。有没有我想念的例子? 问题答案: JSON对象可以由或Javabean类表示。这是一个使用Javabean的示例。 如下使用它:
问题内容: jOOQ是否结合PostgreSQL提供对JSR310的支持?特别是,我尝试使用以下类: 我正在存储以下数据类型(根据http://www.postgresql.org/docs/9.1/static/datatype- datetime.html ): : : : : 这些数据类型正确吗? jOOQ是否支持,和之间以及上述四个类之间的转换(双向)? 问题答案: jOOQ路线图 直到j
jOOQ是否结合PostgreSQL为JSR310提供支持?特别是,我尝试使用以下类:
我正试图用jooq编写这个查询 我尝试了几件事,但没有成功。到目前为止,我只得到 如何将num列添加到结果中?感谢您的帮助。
你能给我建议正确的方法来启动加密路线吗。
我正在尝试为我的项目使用插件,但在运行命令时得到错误。谁能帮助解决这个问题。提前道谢。 我的Build.sbt 名称:=“包装” 版本:=“1.0” enablePlugins(JDKPackagerPlugin) 我的主要班级 我的plugins.sbt