加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Jooq Result的自定义转换器

发布时间:2020-12-14 19:36:26 所属栏目:Java 来源:网络整理
导读:实际上我们使用fetchInto()将结果转换为对象列表. 例如: 员工pojo匹配数据库表是员工. ListEmployee employeeList = sql.select(Tables.Employee) .from(Tables.EMPLOYEE).fetchInto(Employee.class); 同样,我们如何转换我们使用连接获取的记录? 例如: 客
实际上我们使用fetchInto()将结果转换为对象列表.

例如:

员工pojo匹配数据库表是员工.

List<Employee> employeeList = sql.select(Tables.Employee)
                                 .from(Tables.EMPLOYEE).fetchInto(Employee.class);

同样,我们如何转换我们使用连接获取的记录?

例如:

客户pojo匹配数据库表是客户.

员工pojo匹配数据库表是员工.

sql.select(<<IWantAllFields>>).from(Tables.CUSTOMER)
                              .join(Tables.EMPLOYEE)
                              .on(Tables.EMPLOYEE.ID.equal(Tables.CUSTOMER.EMPLOYEE_ID))
                              .fetchInto(?);

解决方法

要从连接的表源中选择所有字段,只需选择“none”:
Result<Record> result =
sql.select().from(Tables.CUSTOMER)
            .join(Tables.EMPLOYEE)
            .on(...)
            .fetch();

然后,jOOQ将对已知的表源进行内省并为您生成所有列引用.创建POJO关系的一种方法是使用各种Result.intoGroups()方法之一.例如.:

Map<Integer,List<Customer>> map =
result.intoGroups(CUSTOMER.EMPLOYEE_ID,Customer.class);

这将生成List< Customer>的地图.每个EMPLOYEE_ID值的pojos.

另请注意:与调用DefaultRecordMapper的任何映射操作一样,当JOIN操作生成两次相同的列名称(例如CUSTOMER.ID和EMPLOYEE.ID)时,映射可能无法按预期工作 – 因为DefaultRecordMapper不会知道特定列来自哪个表.

对于更复杂的映射,您应该实现自己的RecordMapperProvider

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读