Sye*_*hul 5 java sql type-conversion jooq modelmapper
实际上我们正在使用fetchInto()将结果转换为对象列表.
例如:
Employee pojo匹配数据库表是员工.
List<Employee> employeeList = sql.select(Tables.Employee)
.from(Tables.EMPLOYEE).fetchInto(Employee.class);
Run Code Online (Sandbox Code Playgroud)
同样,我们如何转换我们使用连接获取的记录?
例如:
Customerpojo匹配数据库表是customer.
Employeepojo匹配数据库表是employee.
sql.select(<<IWantAllFields>>).from(Tables.CUSTOMER)
.join(Tables.EMPLOYEE)
.on(Tables.EMPLOYEE.ID.equal(Tables.CUSTOMER.EMPLOYEE_ID))
.fetchInto(?);
Run Code Online (Sandbox Code Playgroud)
要从连接表源中选择所有字段,只需选择“无”:
Result<Record> result =
sql.select().from(Tables.CUSTOMER)
.join(Tables.EMPLOYEE)
.on(...)
.fetch();
Run Code Online (Sandbox Code Playgroud)
然后,jOOQ 将内省已知的表源并为您生成所有列引用。创建 POJO 关系的一种方法是使用多种Result.intoGroups()方法之一。例如:
Map<Integer, List<Customer>> map =
result.intoGroups(CUSTOMER.EMPLOYEE_ID, Customer.class);
Run Code Online (Sandbox Code Playgroud)
List<Customer>这将生成每个值的 pojo地图EMPLOYEE_ID。
旁注:与调用 的任何映射操作一样,当您的操作生成两次相同的列名(例如和)DefaultRecordMapper时,映射可能无法按预期工作- 因为不知道特定列源自哪个表。JOINCUSTOMER.IDEMPLOYEE.IDDefaultRecordMapper
对于更复杂的映射,您可能应该实现自己的RecordMapperProvider