2017-12-05 10 views
0

私はJavaを使い慣れていないので、自分のアプリケーション用にDAOを作成する必要があります。しかし、私は各クラス(インターフェイスを持つ)とメソッドをオーバーライドするためのDAOを作成したくありません。 DAOを他のすべてで拡張することは可能ですか?すべての種類のクラスで動作するメソッドを使用できますか? たとえば、クラスMyClassおよびクラスFooを単一のmehtod getList()で処理できるDAO。 ありがとうございました!すべてのクラスのJava DAO

+0

は同じかに似GETLIST()の実装ですすべてのクラス?あなたはこれまでに持っていたコードをいくつか見せることができますか? – tsolakp

+0

私はコードを持っていませんが、私はPHPのようなものを考えていました。たとえば、文字列を関数、クラスオブジェクトに変換する... http://projects.spring.io/spring-data/ – Pythorogus

+0

しかし、私はJava 7でそれを行う必要があります、私はフレームワークやライブラリを使用することはできません。出来ますか ? – Antonio

答えて

0

ないようgooedアイデア、一般的に、しかし...

それは、約低レベルJDBC(などHibernateは、春のようなノーフレームワーク)の場合:あなたが作ることができる

は、 AbstractDAOクラス、次に他のDAOクラス(UserDAO、ProductDAOなど)を作成すると、それらのDAOクラスをすべて持つCommonServiceクラスを作成し、必要な機能を提供できます。

例:その後、

abstract class AbstractDAO { 
    private DataSource dataSource; 

    protected getDataSource() { // Inject it or hard-coded dataSource 
     return dataSource; 
    } 
} 

public class UserDAO extends AbstractDAO { 

    public User read(long id) { 
     // blablabla 
     return user; 
    } 

    public List<User> findAll() { 
     // blablabla 
     return users; 
    } 
    // and so on... 
} 

public class ProductDAO extends AbstractDAO { 

    public Product read(long id) { 
     // blablabla 
     return product; 
    } 

    public List<Product> findAll() { 
     // blablabla 
     return products; 
    } 
    // and so on... 
} 

その後、他のリポジトリ、および:

public class CommonService { 
    private final UserDAO userDAO = new UserDAO(); 
    private final ProductDAO productDAO = new ProductDAO(); 
    // other repositories 

    public User readUser(long id) { 
     return userDAO.read(id); 
    } 

    public Product readProduct(long id) { 
     return productDAO.read(id); 
    } 

    public List<User> findAllUsers() { 
     return userDAO.findAll(); 
    } 

    public List<Product> findAllProducts() { 
     return productDAO.findAll(); 
    } 
} 
0

そして、あなたが意味する場合は、作りたいです一般的なリポジトリ(DAO)ですが、Springは既にそれをかなり良い方法で行っています(JpaRepositoryを呼び出します)。 interface MyRepository extends JpaRepository<User, Long> { }): 出典:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.multiple-modules

しかし、あなたが望むなら、あなたはこのような何かに基づいて、あまりにもこのような仕組みを作ることができます(それは、例えば、春にないようにそれを動作させるための煩雑な作業となります。彼らは、このような驚異的なプロジェクトを実現するために、昼夜を働いた専門家)のチームですので:

public abstract class Repo<T, K> { 
    public abstract T read(K id); 
    public abstract List<T> findAll(); 
} 

または

public interface Repo<T, K> { 
    T read(K id); 
    List<T> findAll(); 
} 
関連する問題