所有类的Java DAO

时间:2017-12-05 22:50:35

标签: java dao

我是Java的新手,我必须为我的应用程序制作一些DAO。但是,我不想为每个类(带接口)和覆盖方法制作DAO。 是否有可能通过所有其他类的方法使所有其他DAO扩展? 例如,一个可以使用单个mehtod getList()处理类MyClass和类Foo的DAO。 谢谢!

2 个答案:

答案 0 :(得分:0)

总的来说,不是那个想法,但是......

如果它是关于低级JDBC(没有像Hibernate,Spring等那样的框架),那么:

您可以创建一个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();
    }
}

答案 1 :(得分:0)

如果你的意思是你想创建一个通用的存储库(DAO),那也不是一个好主意,因为Spring已经以一种非常好的方式实现它(它调用" hello " ,例如JpaRepository ): 资料来源:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.multiple-modules

但是如果你愿意的话,你也可以基于这样的东西建立这样的机制(但是如果它像春天一样工作将是一项繁琐的工作;因为他们是一个专家团队,日以继夜地工作以实现这样一个巨大的项目):

interface MyRepository extends JpaRepository<User, Long> { }

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