7

当我目前使用 Jooq 查询时,我明确地将每个记录对象转换为预期的记录类型。

Result<Record> result = sql.select().from(Tables.COUNTRY).fetch();
for (Record r : result) {
    CountryRecord countryRecord = (CountryRecord) r;
    //Extract data from countryRecord
    countryRecord.getId();
}

使用 Jooq 是否可能将结果直接转换为所需的记录类型?

如(这不会编译):

Result<CountryRecord> countryRecords = (Result<CountryRecord>) sql.select().from(Tables.COUNTRY).fetch();
for (CountryRecord cr : countryRecords) {
    cr.getNamet();
    //etc...
}
4

2 回答 2

8

@卢卡斯,

实际上,我们正在使用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(?);
于 2013-08-29T04:46:26.733 回答
7

select().from(...)当您想要获取生成的记录类型时,您不应该使用该语法。改为使用selectFrom()。这记录在这里:

http://www.jooq.org/doc/3.1/manual/sql-execution/fetching/record-vs-tablerecord

所以你的查询应该是:

Result<CountryRecord> countryRecords = sql.selectFrom(Tables.COUNTRY).fetch();
for (CountryRecord cr : countryRecords) {
    cr.getNamet();
    //etc...
}
于 2013-07-17T07:16:42.103 回答