如何为连接表创建DAO?

Jc *_*dev 12 dao join

我目前正在学习如何Dao在我的项目中使用模式.我知道,一张桌子相当于一张Dao,我是对的吗?就像StudentDao,SubjectDao.

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

我应该把它放到StudentDao?或者SubjectDao?或者在这种情况下有一个很好的做法?

Sim*_*iak 13

DAO - Data Access ObjectObject应该只与数据库通信.因此,如果您想要JOIN两个表,那么您必须参加DTO ObjectStudentDTO参考SubjectDTO.

public class StudentDTO {

   private String name;
   private String surname;
   private String age;
   private SubjectDTO subject;

  // getters, setters
}
Run Code Online (Sandbox Code Playgroud)

所以,SubjectDTO

public class SubjectDTO {

   private String name;
   private int room;

  // getters, setters
}
Run Code Online (Sandbox Code Playgroud)

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();
         }
      }
   }
}
Run Code Online (Sandbox Code Playgroud)

我建议你查看一些教程.

问候