当我当前使用Jooq查询时,我明确地将每个记录对象转换为预期的记录类型.
Result<Record> result = sql.select().from(Tables.COUNTRY).fetch();
for (Record r : result) {
CountryRecord countryRecord = (CountryRecord) r;
//Extract data from countryRecord
countryRecord.getId();
}
Run Code Online (Sandbox Code Playgroud)
与Jooq一起,是否可能将结果直接转换为所需的记录类型?
如(这不编译):
Result<CountryRecord> countryRecords = (Result<CountryRecord>) sql.select().from(Tables.COUNTRY).fetch();
for (CountryRecord cr : countryRecords) {
cr.getNamet();
//etc...
}
Run Code Online (Sandbox Code Playgroud)
@Lukas,
实际上我们正在使用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)
如果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...
}
Run Code Online (Sandbox Code Playgroud)