0

アプリケーション用の DAO レイヤーを作成したいと考えています。グーグルで調べたところ、多くの人々がジェネリックDAOアプローチを使用していることがわかりました(DAOを繰り返さないでください!)。

しかし、私はこのアプローチが好きではありませんでした。

異なる DAO 実装の DAO 間でわずかに異なるインターフェイスが必要な場合はどうすればよいですか? (つまり、汎用インターフェイスのメソッドは、DAO 実装で作成したいものとまったく同じではありません)

エンティティの主キーが複数の属性で構成されている場合はどうなりますか?

4

5 に答える 5

4

特定のエンティティに対してわずかに異なる DAO が必要な場合は、いつでも一般的なものを拡張できます( MySpecificDAO <....> extends GenericDAO<....>)。主キーはそれ自体を複合することができますが、2 つの主キーを持つことは不可能です。

于 2012-12-25T14:43:25.757 に答える
2

リンク先の記事から直接:

GenericDAO の拡張

もちろん、各 DAO のインターフェースは GenericDao インターフェースに基づいています。インターフェイスを特定のドメイン クラスに適合させ、ファインダ メソッドを含めるように拡張する必要があるだけです。リスト 6 に、特定の目的のために拡張された GenericDao インターフェースの例を示します。

最後の質問について: 定義上、エンティティには主キーが 1 つだけあります。

于 2012-12-25T14:43:48.850 に答える
2

欠点: DAO を実装する必要があります。6 年前のアドバイスに従うのをやめ、代わりにSpring Data リポジトリを使用してください。そうすれば、実装をまったく書く必要はありません。

于 2012-12-25T14:56:18.677 に答える
1

DAOの実装ごとにDAO間でわずかに異なるインターフェースが必要な場合はどうなりますか?

GenericDaoImplクラスのメソッドをオーバーライドできます。または、新しいメソッドを作成します。

エンティティに2つ以上の主キーがある場合はどうなりますか?

複合キーシナリオを意味していると思います。通常、のfindOne / readOne / getOneメソッドはGenericDaoパラメーターを期待することに注意してください(T key)。ここでのTはタイプであり、複合主キーである可能性があります。

例えば:

class PersonPK{
 private String name;
 private Date birthday;
.....
}
于 2012-12-25T14:47:06.863 に答える
0

ここでは、まさにその記事の実用的で改善された実装である Generic DAOを見つけることができます。ページの下部にあるExample.javaをチェックアウトするだけです。この例では、「異なる DAO 実装の DAO 間でわずかに異なるインターフェイス」を定義する方法を確認できます。

于 2012-12-28T09:01:43.313 に答える