タグ付けされた質問 「dao」


12
Javaのデータアクセスオブジェクト(DAO)
ドキュメントを調べていたところ、という用語に出くわしましたDAO。データアクセスオブジェクトであることがわかりました。誰かがこれが実際に何であるかを私に説明してもらえますか? これは、さまざまな種類のソースからデータにアクセスするための一種のインターフェースであることを知っています。私の私のこの小さな研究の最中に、データソースまたはデータソースオブジェクトと呼ばれる概念にぶつかりました。 DAOそれがどこで使用されているかという点で、プログラムでa が何であるかを本当に知りたいです。使い方は?非常に基本的なものからこの概念を説明するページへのリンクも高く評価されます。
347 java  dao 

1
TransactionAwarePersistenceManagerFactoryProxyを理解しているかどうかわからない
私はorg.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxySpringプロジェクトでを使用しようとしていますが、それをどのように使用するか、またはそれがまさに私が探しているものかどうかはわかりません。私のDAOをプレーンなJDOで動作させるのに役立つことに気づきましたPersistenceManagerFactory。別の質問です:プロキシが正しく作成されない場合はどうなりますか?それを使用して、ファクトリーにアクセスし、トランザクション対応の永続性マネージャーを作成できますか?ファクトリーによって管理されるオブジェクトがシングルトンである場合、これは状況を変えますか?なぜPersistenceManagerFactoryに直接アクセスしないのですか?おそらくPersistenceManagerFactoryUtils.getPersistenceManager私のニーズにより適しているでしょうか?getObjectnullを返すことができますか?
192 java  spring  persistence  dao  jdo 

5
データマッパー、テーブルデータゲートウェイ(ゲートウェイ)、データアクセスオブジェクト(DAO)、リポジトリパターンの違いは何ですか?
デザインパターンのスキルを磨こうとしていますが、これらのパターンの違いは何ですか?それらはすべて同じもののように見えます-特定のエンティティのデータベースロジックをカプセル化して、呼び出し元のコードが基になる永続性レイヤーを認識しないようにします。私の簡単な調査から、それらすべては通常、標準のCRUDメソッドを実装し、データベース固有の詳細を抽象化します。 命名規則(CustomerMapper、CustomerDAO、CustomerGateway、CustomerRepositoryなど)は別として、もしあれば、どのような違いがありますか?違いがある場合、いつどちらを選択しますか? 以前は、次のようなコードを記述しました(単純化された、当然のことですが、通常はパブリックプロパティを使用しません)。 public class Customer { public long ID; public string FirstName; public string LastName; public string CompanyName; } public interface ICustomerGateway { IList<Customer> GetAll(); Customer GetCustomerByID(long id); bool AddNewCustomer(Customer customer); bool UpdateCustomer(Customer customer); bool DeleteCustomer(long id); } CustomerGatewayすべてのメソッドに特定のデータベースロジックを実装するクラスがあります。時にはインターフェイスを使用せず、CustomerGatewayのすべてのメソッドを静的にする(そうすれば、テストが難しくなります)ので、次のように呼び出すことができます。 Customer cust = CustomerGateway.GetCustomerByID(42); これは、Data MapperおよびRepositoryパターンの場合と同じ原則のようです。DAOパターン(ゲートウェイと同じものだと思いますか?)もデータベース固有のゲートウェイを推奨しているようです。 何か不足していますか?同じことを正確に行うために3〜4つの異なる方法があるのは少し奇妙に思えます。

2
Hibernateでの列挙
DAOに、値がJava列挙から取得されるフィールドがあると便利なことがよくあります。典型的な例はログインDAOで、通常、ユーザーを「NORMAL」または「ADMIN」として特徴付けるフィールドがあります。Hibernateでは、次の2つのオブジェクトを使用して、この関係を(半)タイプセーフな方法で表現します。 class User { String username; String passwd; UserType type; } class UserType { private enum Type {ADMIN, NORMAL}; private String type; //Setters/Getters for Hibernate public void setType(String type); public String getType(); //Setters/Getters for user public void setUserType(UserType.Type t); public UserType.Type getUserType(); public static UserType fromType(UserType.Type t); } これは機能しますが、UserTypeクラスが不格好で、いくつかの値を格納するためだけに官僚主義が多すぎることがわかりました。理想的には、Hibernateは列挙型フィールドを直接サポートし、列挙値を格納するための追加のテーブルを作成する必要があります。 私の質問は:Hibernateで列挙型クラスを直接マップする方法はありますか?そうでない場合、列挙を表すための私のパターンは十分に良いですか、それとも何かが欠けていますか?人々は他にどのようなパターンを使用していますか?
82 java  hibernate  dao 

5
「@Transactional」はサービスレイヤーまたはDAOのどこに配置する必要がありますか
まず、以前に質問と回答をしたことがあるのに、検索結果を取得できなかった可能性があります。一般的に(またはこれまでのところ常に:))サービスレイヤーでトランザクションアノテーションを定義します典型的な春の休止状態のクラッドは通常です Controller-> Manager-> Dao-> Orm。 クライアントサイトに基づいてドメインモデルを選択する必要がある状況になりました。クライアントAが私のドメインモデルを使用しているとしましょう。すべて問題ありませんが、他のクライアントサイトがWebサービスを提供し、ドメインモデルを使用していません。 どのレイヤーを置き換える必要がありますか。Webサービスからデータを取得して送り返すのはDAOである必要があると思います。つまり、2つの別々に記述されたDAOレイヤーであり、シナリオに基づいてプラグインされます。 @Transactionalサービスレイヤーに配置したときに、密結合を行っていることに気付きました(そのようなことがある場合、または疎結合がないと言う場合)。非常に多くの脳が間違っているはずがありませんか、それとも彼らですか(私はそれを疑っています)。 したがって、質問は「@TransactionalサービスレイヤーまたはDAOをどこに配置する必要があるか」です。そして、それは私が置き換える必要がある下向きのサービス層ですか。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.