Java-传递未知DAO

Java-传递未知DAO,java,jakarta-ee,Java,Jakarta Ee,我创建了一个通用方法,在该方法中,我将传递一个DAO,但它不是一个DAO。我不仅要通过学生道,还要通过教师道和俱乐部道 最初,这是我的方法: public static String getSomething(StudentDao, String id){ Properties proFind = new Properties(); proFind.put(StudentDao.ID, id); dao.select(proFind).

我创建了一个通用方法,在该方法中,我将传递一个DAO,但它不是一个DAO。我不仅要通过学生道,还要通过教师道和俱乐部道

最初,这是我的方法:

    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;
    }
公共静态字符串getSomething(类dao,字符串id){
Properties proFind=新属性();
proFind.put(StudentDao.ID,ID);
dao.select(proFind.get)(0);
归还需要的东西;
}
但这是不对的

所以我的目标是通过该方法传递任何Dao。 我错过了java的一些东西吗? 任何想法或启示都是值得赞赏的

[编辑]

我所有的Dao都扩展了Dao,Dao是和接口。 我关心的就是这个方法,在这个方法中我如何使用任何Dao。
使用的属性也可以在接口Dao中找到。

这就是java创建接口或

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


公共静态字符串getSomething(Dao-Dao,stringid)

我同意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代码推送到基类中。当我第一次开始使用DAOs时,我发现下面的文章非常有用:

使用它

public static String getSomething(Object dao, String id){

if(dao instanceOf StudentDao){
 // do your code
 }
else if(dao instanceOf AnotherDao){
 // do your code
 }

等等…………

这不是有点倒退吗?您的业务代码不应该包含类似于
studentDAO.getStudentById(id)的内容吗
然后使用它(可能还有其他dao,比如找老师和学生)。如果在getSomething中,你将使用所有dao的相同方法,比如获取dao的select方法,然后使用编程接口选项如何知道字符串总是返回?我不知道,我只是用一个例子建议了一个解决方案。