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等