3

我试图创建方法(这是一种常用方法,因此我可以将任何 Table 类对象传递给它) ,如下所示,它将List作为TableRecord参数并获取表名和列名,所以我在下面的代码中做。

public void getColumns(List<TableRecord> records){
    for(TableRecord record : records){
        Table table = record.getTable();

        Field[] fields = table.fields();
        for(Field field : fields){
            field.getName();
            record.getValue(field);

        }
    }
}

但我的问题在这里如何创建一个TableRecord类的对象?这样我就可以调用上述方法并传递List对象TableRecord

我正在尝试一种通用方法,它将获取 TableRecord 对象并返回数据库表名以及该表具有的所有列。我必须为此使用TableRecord或任何其他对象以及如何创建该对象?

我不能做这样的事情

TableRecord record = new  TableRecord()

因为它已经是一个接口那么如何创建对象呢?或者我必须将另一个类传递给方法?

编辑 :-

如果你会看到我的代码,你可以检查作为参数的方法,这样List它就 可以接受任何 DB 表 JOOQ 类,例如,等等。所以方法不是通用的,它的范围很广,开发人员可以通过任何类型的 Jooq 创建的表类对象传递这个。现在我有' '对象,现在我必须获取 columnName 或 fieldName 及其值,我的意思是这些字段包含的数据,以便我可以将数据设置到另一个将与 UI 交互的 bean 类。TableRecordListLoginRecord.javaEmpRecord.javaList<TableRecord>

4

2 回答 2

2

首先你需要知道这TableRecord是一个接口,所以很明显你不能在你的代码中创建它。您需要做的是找到实现此接口并符合您要求的类。由于 jooq 层次结构非常复杂,我尝试向您展示如何找到最佳选择。

public interface TableRecord<R extends TableRecord<R>> extends Record

那么这个界面在:

public interface UpdatableRecord<R extends UpdatableRecord<R>> extends TableRecord<R>

jooq 有它的实现:

public class TableRecordImpl<R extends TableRecord<R>> extends AbstractRecord implements TableRecord<R>
public class AddressRecord extends org.jooq.impl.UpdatableRecordImpl<AddressRecord> implements org.jooq.Record8<Integer, String, String, String, Float, Float, Integer, String>
public class UpdatableRecordImpl<R extends UpdatableRecord<R>> extends TableRecordImpl<R> implements UpdatableRecord<R>

练习时间

这只是 Jooq 的基础脚手架,但有一点很重要。就您使用 jooq 而言,您更有可能生成了表,并且表记录了代码中的每个数据库表。这看起来像:

public class AddressRecord extends org.jooq.impl.UpdatableRecordImpl<AddressRecord> implements org.jooq.Record8<Integer, String, String, String, Float, Float, Integer, String>

org.jooq.impl.UpdatableRecordImpl<AddressRecord>所以你的所有记录实际上都在扩展implements TableRecord<R>

方法参数

只要您使用接口作为参数,您就可以对实现的每个对象使用多态调用TableRecord<R>。在这种情况下,您可以将所有记录放在这里。

List<TableRecord> records = new List<TableRecord>();
records.add(new AddressRecord());
records.add(new CityRecord());
records.add(new UserRecord());


编辑

这段代码是通用的吗?

如果您希望此代码适用于任何类型的TableRecord此代码适合您。但是这段代码并不严格generic,因为您不使用泛型类型。不过,我会以这种方式保留此代码。

于 2013-09-23T08:18:54.573 回答
2

根据您的评论,我认为您正在使用 jOOQ 的代码生成器来生成表格。因此,您不需要尝试实例化TableRecord,而是使用生成的引用。为了创建新记录,只需使用:

MyTableRecord record = DSL.using(configuration).newRecord(MY_TABLE);

这正如关于使用 jOOQ 进行 CRUDDSLContext.newRecord(Table)的章节中所解释的那样

于 2013-09-23T08:56:16.750 回答