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