【问题标题】:How to create a DAO for join tables?如何为连接表创建 DAO?
【发布时间】:2012-06-03 08:49:34
【问题描述】:

我目前正在学习在我的项目中使用Dao 模式。我知道,一张表相当于一张Dao,对吗?就像StudentDaoSubjectDao

每个Dao 在其关联表中执行CRUD 操作,但我的问题是,我将如何为连接表创建DAO?假设我有一个查询来加入学生和主题表,那么我该如何创建一个DAO呢?

我应该把它放到StudentDao 吗?或SubjectDao?还是在这种情况下有好的做法?

【问题讨论】:

    标签: join dao


    【解决方案1】:

    DAO - Data Access ObjectObject,应该只与数据库通信。所以如果你想JOIN 两个表,那么你必须在DTO Object StudentDTO 参考SubjectDTO 上。

    public class StudentDTO {
    
       private String name;
       private String surname;
       private String age;
       private SubjectDTO subject;
    
      // getters, setters
    }
    

    所以,SubjectDTO

    public class SubjectDTO {
    
       private String name;
       private int room;
    
      // getters, setters
    }
    

    DAO 可以是这样的:

    public StudentDAO {
    
       private final String SELECT_QUERY = "SELECT * FROM Student S JOIN Subject Sb ON (S.id = Sb.id)"
    
       public ArrayList<StudentDTO> getData() {
    
          ArrayList<StudentDTO> data = null;
          StudentDTO member = null;
          Connection con = null;
          PreparedStatement ps = null;
          ResultSet rs = null;
    
          try {
             con = OracleDAOFactory.getConnection();
             ps = con.prepareStatement(SELECT_QUERY);
             rs = ps.executeQuery();
             while (rs.next()) {
                member = new StudentDTO();
                member.setName(rs.getString(1));
                ...
                data.add(member);
             }
             return data;
          }
          catch (SQLException ex) {
             // body
          }
          finally {
             if (con != null) {
                con.close();
             }
          }
       }
    }
    

    我建议你查看一些教程。

    问候

    【讨论】:

    • 感谢您的回复.. 似乎 DTO 是这个问题的答案
    • 在示例中命名像getData() 这样的函数有什么最佳实践吗?我认为getData 不是一个好名字。 getStudentWithSubject 或许更好?
    猜你喜欢
    • 1970-01-01
    • 2021-02-23
    • 2020-08-18
    • 1970-01-01
    • 2016-04-28
    • 2015-10-29
    • 2011-11-11
    • 2019-09-03
    • 2017-02-11
    相关资源
    最近更新 更多