Java jOOQ我可以将两个表的连接获取到各自的pojo中吗
在jOOQ中,如果我想将表中的一行提取到jOOQ自动生成的POJO中,我会这样做,例如:Java jOOQ我可以将两个表的连接获取到各自的pojo中吗,java,jooq,Java,Jooq,在jOOQ中,如果我想将表中的一行提取到jOOQ自动生成的POJO中,我会这样做,例如: dsl.selectFrom(USER) .where(USER.U_EMAIL.equal(email)) .fetchOptionalInto(User.class); 现在,假设我想在两个表(例如用户和角色)之间进行连接,如何将结果提取到这两个表的POJO中?将POJO提取到映射中 这是一个使用 映射结果= dsl.selectUSER
dsl.selectFrom(USER)
.where(USER.U_EMAIL.equal(email))
.fetchOptionalInto(User.class);
现在,假设我想在两个表(例如用户和角色)之间进行连接,如何将结果提取到这两个表的POJO中?将POJO提取到映射中
这是一个使用
映射结果=
dsl.selectUSER.fields
.selectROLE.fields
.fromUSER
.joinUSER\u TO_ROLE.onUSER.USER\u ID.equaler\u TO_ROLE.USER\u ID
.joinROLE.onROLE.ROLE\u ID.equaler\u至\u ROLE.ROLE\u ID
.whereUSER.U_EMAIL.equalemail
.fetchGroups
//首先将记录映射到用户表中,然后映射到键POJO类型中
r->r.intoUSER.intoUserPojo.class,
//首先将记录映射到角色表中,然后映射到值POJO类型中
r->r.intoRolePojo.intoRolePojo.class
;
注意,如果您想在用户不一定有任何角色的情况下使用左联接,并且希望每个用户都有一个空列表,那么您必须自己将空角色转换为空列表
确保已在POJO上激活生成equals和hashCode,以便能够将它们作为键放入HashMap中:
符合事实的
使用自定义的分层POJO并将它们提取到嵌套集合中
一个经常重复出现的问题是如何在jOOQ中获取嵌套集合,即,如果结果数据结构如下所示,该怎么办:
类用户{
长id;
字符串电子邮件;
列出角色;
}
阶级角色{
长id;
字符串名;
}
从jOOQ 3.14开始,如果您的RDBMS支持它,您现在可以使用SQL/XML或SQL/JSON作为嵌套集合的中间格式,然后使用Jackson、Gson或JAXB将文档映射回Java类,或者保留XML或JSON(如果您首先需要的话)。例如:
列出用户=
ctx.select
USER.ID,
USER.EMAIL,
领域
选择jsonarrayagjsonobjectrole.ID、ROLE.NAME
.来自角色
.joinUSER\u TO_ROLE.onROLE.ROLE\u ID.equaler\u TO_ROLE.ROLE\u ID
.whereUSER_TO_ROLE.USER.ID.equaler.ID
.A角色
.fromUSER
.whereUSER.EMAIL.eqemail
.fetchIntoUser.class;
请注意,JSON_ArrayAg将空集聚合为NULL,而不是空[] 用户和角色是如何连接的?一对多?多对一?多对多?多对多,所以是的,有一个表UserToRole也可以作为答案。但我只是想知道这怎么能和偷懒结合起来?@Kango_V:说得好。这两个功能目前无法组合。我已为此创建功能请求:。当然,您可以将游标从fetchLazy转换为Java8流,然后使用collect对结果进行分组……这对于一对多关系是如何工作的?我们有一个功能表和一个层表,一个层可以有多个功能。因此,希望查询并获取输出,因为映射字节对应于一个tierID和一组功能名称。@user160108 use@LukasEder有效,如果有另一个查询,是否也可以映射到一对多关系的类似pojo的映射?