5

实际上,我们正在使用fetchInto()将结果转换为对象列表。

例如:

Employeepojo匹配数据库表是员工。

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

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

例如:

Customerpojo匹配的数据库表是customer.

Employeepojo匹配的数据库表是employee.

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

1 回答 1

3

要从连接表源中选择所有字段,只需选择“无”:

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>pojos映射。EMPLOYEE_ID

附带说明:与调用 的任何映射操作一样,当您的操作产生两次相同的列名(例如和)DefaultRecordMapper时,映射可能无法按预期工作- 因为不知道特定列来自哪个表.JOINCUSTOMER.IDEMPLOYEE.IDDefaultRecordMapper

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

于 2013-08-30T07:30:40.350 回答