【问题标题】:Java- Passing unknown DAOJava- 传递未知的 DAO
【发布时间】:2014-07-16 11:31:15
【问题描述】:

我创建了一个通用方法,在该方法中我将传递一个 DAO,但它不会是一个单一的 DAO。就像我不仅会通过 StudentDao,还会通过 TeachersDao 和 ClubsDao。

原来,这是我的方法:

    public static String getSomething(StudentDao, String id){

        Properties proFind = new Properties();
        proFind.put(StudentDao.ID, id);

        dao.select(proFind).get(0);

        return somethingINeed;
    }

但后来我决定只使用一种方法,让它变得通用.. 是这样的:

    public static <T> String getSomething(Class<T> dao, String id){

        Properties proFind = new Properties();
        proFind.put(StudentDao.ID, id);

        dao.select(proFind).get(0);

        return somethingINeed;
    }

但这是不正确的。

所以我的目标是通过该方法中的任何道。 我错过了java中的东西吗? 非常感谢任何想法或启发。

[编辑]

我所有的 Daos 都扩展了 Dao 和接口。 我关心的只是我如何使用任何道的这种方法。 使用的属性也可以在界面Dao中找到。

【问题讨论】:

  • 这不是有点倒退吗?您的业​​务代码不应该包含 studentDAO.getStudentById(id); 之类的内容,然后使用它(可能还有其他 DAO,例如获取教师和他们的学生)。
  • 如果在 getSomething 中你将使用所有 dao 的相同方法,例如获取 dao 的 select 方法,然后使用编程接口选项

标签: java jakarta-ee


【解决方案1】:

我同意上面 Kayaman 的评论。

您的服务/业务层应与多个 DAO 交互,以对不同实体执行 CRUD 操作,例如学生,老师。

public class MyService {

    private StudentDao studentDao;
    private TeacherDao teacherDao;

    // Daos injected

    public Student findStudent(Long id) {
        return this.studentDao.find(id);
    }

    // Other methods involving students or teachers
}

在我看来,尝试拥有一个通用 DAO 很麻烦,而且不是好的设计。

如果您有基础 DAO 和基础实体类,您仍然可以将大量样板 CRUD 代码推送到基础类中。当我第一次开始使用 DAO 时,我发现以下文章非常有用:Don't repeat the DAO!

【讨论】:

    【解决方案2】:

    这就是 java 创建 Interfaceenter link description hereInheritance 的原因

    只需创建一个 DAO 接口或基类并将您的方法更改为

    public static String getSomething(Dao dao, String id)

    【讨论】:

    • 你怎么知道总是返回一个字符串?
    • 我不知道,我只是用一个例子提出了一个解决方案。
    【解决方案3】:

    使用这个

    public static String getSomething(Object dao, String id){
    
    if(dao instanceOf StudentDao){
     // do your code
     }
    else if(dao instanceOf AnotherDao){
     // do your code
     }
    

    等等……

    【讨论】:

      猜你喜欢
      • 2011-06-08
      • 2014-06-21
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多