我试图创建方法(这是一种常见方法,以便我可以将任何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
可以接受任何DB表JOOQ类,例如LoginRecord.java
,EmpRecord.java
等。因此该方法不是通用的,并且它很广泛,开发人员可以传递任何类型的Jooq由此创建表类对象。现在我有了'List<TableRecord>
'对象,现在我必须获取columnName或fieldName及其值,这意味着这些字段包含的数据,以便可以将数据设置为将与UI交互的另一个bean类。 最佳答案
首先,您需要知道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>
的每个对象使用策略调用。在这种情况下,您可以将所有记录放在这里。List<TableRecord> records = new List<TableRecord>();
records.add(new AddressRecord());
records.add(new CityRecord());
records.add(new UserRecord());
编辑
该代码通用吗?
如果您希望此代码适用于任何
TableRecord
,则此代码适合您。但是此代码严格来说不是generic
,因为您不使用泛型类型。不过,我将以这种方式保留此代码。