我正在尝试创建方法(这是一种常见方法,以便我可以将任何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.java
, List<TableRecord>
等等。所以方法不是通用的,它的广泛,开发人员可以通过它传递任何类型的Jooq创建的表类对象。现在我有'{{1}}'对象现在我必须得到columnName或fieldName,它们的值我指的是那些字段包含的数据,这样我就可以将数据设置为另一个与UI交互的bean类。
答案 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);
章节中所述