3

以下のようなメソッドを作成しようとしていました(これは、テーブルクラスオブジェクトを渡すことができる一般的なメソッドです) 。これはListTableRecord引数として受け取り、テーブル名と列名も取得するため、以下のコードを実行しています。

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 の基本的な足場にすぎませんが、重要なことが 1 つあります。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);

これは、CRUD に jOOQ を使用する方法DSLContext.newRecord(Table)に関する章で説明されているとおりです。

于 2013-09-23T08:56:16.750 に答える