Jooq JsonObject Select 所有语句
Jooq JsonObject Select All Statement
context.select(
jsonObject(
key("id").value(CHAPTER.ID),
key("name").value(CHAPTER.NAME),
key("createdAt").value(CHAPTER.CREATED_AT),
key("topics").value(
jsonArrayAgg(
jsonObject(
key("id").value(TOPIC.ID),
key("name").value(TOPIC.NAME),
key("createdAt").value(TOPIC.CREATED_AT),
)
)
)
)
)
.from(CHAPTER)
.join(TOPIC)
.on(CHAPTER.ID.eq(TOPIC.CHAPTER_ID))
.fetch().into(Chapter.class);
当我执行上面的 jooq 语句时,它的工作文件。
在 select 语句中,如果没有,我必须指定 table 的所有列,否则它们不会被加载到结果中。
有什么简单的方法可以 select table 中的所有列,而不是在使用 jooq 中的连接时为每一列编写每个“key().value()”对?
您可以使用 jsonObject(Field...)
重载,并这样使用它:
jsonObject(MY_TABLE.fields())
它将字段名称生成为 JSON 对象键,这似乎不是您想要的,您似乎想使用驼峰式表示法。您仍然可以使用这种方法动态地执行此操作:
jsonObject(Arrays
.stream(MY_TABLE.fields())
.map(f -> key(toCamelCase(f.getName())).value(f))
.toList()
)
你所要做的就是实现toCamelCase()
辅助方法,或者使用java.beans
模块中的一个,或者Spring等
context.select(
jsonObject(
key("id").value(CHAPTER.ID),
key("name").value(CHAPTER.NAME),
key("createdAt").value(CHAPTER.CREATED_AT),
key("topics").value(
jsonArrayAgg(
jsonObject(
key("id").value(TOPIC.ID),
key("name").value(TOPIC.NAME),
key("createdAt").value(TOPIC.CREATED_AT),
)
)
)
)
)
.from(CHAPTER)
.join(TOPIC)
.on(CHAPTER.ID.eq(TOPIC.CHAPTER_ID))
.fetch().into(Chapter.class);
当我执行上面的 jooq 语句时,它的工作文件。 在 select 语句中,如果没有,我必须指定 table 的所有列,否则它们不会被加载到结果中。 有什么简单的方法可以 select table 中的所有列,而不是在使用 jooq 中的连接时为每一列编写每个“key().value()”对?
您可以使用 jsonObject(Field...)
重载,并这样使用它:
jsonObject(MY_TABLE.fields())
它将字段名称生成为 JSON 对象键,这似乎不是您想要的,您似乎想使用驼峰式表示法。您仍然可以使用这种方法动态地执行此操作:
jsonObject(Arrays
.stream(MY_TABLE.fields())
.map(f -> key(toCamelCase(f.getName())).value(f))
.toList()
)
你所要做的就是实现toCamelCase()
辅助方法,或者使用java.beans
模块中的一个,或者Spring等