如何创建TableRecord对象?

时间:2013-09-23 06:46:21

标签: java jooq

我正在尝试创建方法(这是一种常见方法,以便我可以将任何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

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

编辑: -

如果您将看到我的代码,您可以检查将TableRecord List作为参数的方法,以便此LoginRecord.java可以使用任何数据库表JOOQ类,如EmpRecord.javaList<TableRecord>等等。所以方法不是通用的,它的广泛,开发人员可以通过它传递任何类型的Jooq创建的表类对象。现在我有'{{1}}'对象现在我必须得到columnName或fieldName,它们的值我指的是那些字段包含的数据,这样我就可以将数据设置为另一个与UI交互的bean类。

2 个答案:

答案 0 :(得分: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>

方法参数

就使用interface作为参数,您可以对实现TableRecord<R>的每个对象使用polimorphic调用。在这种情况下,您可以将所有记录放在此处。

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

<小时/> 的修改

此代码是通用的吗?

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

答案 1 :(得分:2)

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

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

这是DSLContext.newRecord(Table),如using jOOQ for CRUD

章节中所述