Вопрос по – Как создать DAO для таблиц соединения?

10

Я в настоящее время изучаю использованиеDao шаблон в моем проекте. Я знаю, одна таблица эквивалентна однойDao, я прав? какStudentDao, SubjectDao.

каждыйDao выполняетCRUD операции в связанных таблицах, но мой вопрос, как я собираюсь создатьDAO для объединенных таблиц? скажем, у меня есть запрос, чтобы присоединиться к таблице ученика и предмета, тогда как мне создатьDAOдля этого?

Должен ли я поместить его вStudentDao? илиSubjectDao? или в такой ситуации есть хорошая практика?

Ваш Ответ

1   ответ
11

DAO - Data Access Object являетсяObject это должно общаться только с базой данных. Так что если вы хотите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 является ответом на эту проблему. Jc dev
Есть ли лучшая практика для именования таких функций, какgetData() в примере? Я думаюgetData это не хорошее имя.getStudentWithSubject может быть лучше?

Похожие вопросы