java - Jooq 结果的自定义转换器

标签 java sql type-conversion jooq modelmapper

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

例如:

Employee pojo匹配数据库表为employee。

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

类似地,我们如何转换使用连接获取的记录?

例如:

Customer pojo匹配的数据库表是customer

Employee pojo匹配的数据库表是employee

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

最佳答案

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

Result<Record> result =
sql.select().from(Tables.CUSTOMER)
            .join(Tables.EMPLOYEE)
            .on(...)
            .fetch();

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

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

这将生成 List<Customer> 的 map 每个 EMPLOYEE_ID 的 pojo值(value)。

旁注:与任何调用 DefaultRecordMapper 的映射操作一样,当您的 JOIN 时,映射可能无法按预期工作操作产生两次相同的列名(例如 CUSTOMER.IDEMPLOYEE.ID ) - 作为 DefaultRecordMapper不知道特定列来自哪个表。

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

关于java - Jooq 结果的自定义转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18510277/

相关文章:

java - PDF 页面的缩略图 (Java)

java - 为什么Netty不执行我的定时任务?

C++:如何将十六进制 HANDLE 转换为十进制?

sql - 从 Windows Azure 中的 sFTP 服务器导入数据库

mysql - 如何统计事件间隔在 5 分钟内发生的事件

double/long double 的 C++ 精度行为

Powershell 使用 ENV 变量转换字符串

java - Spring注入(inject)Struts RequestProcessor

Java超时一组指令

sql - 来自 MySql 中 url 的 GROUP 域