2012-05-29 17 views
8

Obecnie uczę się używać wzoru Dao w moim projekcie. Wiem, jedna tabela jest równoważna jednej Dao, mam rację? podobnie jak StudentDao, SubjectDao.jak utworzyć DAO dla tabel łączenia?

Każdy Dao wykonuje operacje CRUD w powiązanych tabelach, ale moje pytanie brzmi: jak mam utworzyć DAO dla połączonych tabel? powiedzmy, że mam zapytanie, aby dołączyć do tabeli uczniów i tematów, a następnie w jaki sposób utworzyć dla tego DAO?

Czy powinienem umieścić to na StudentDao? lub do SubjectDao? czy w takiej sytuacji jest dobra praktyka?

Odpowiedz

9

DAO - Data Access Object jest Object który powinien komunikować się tylko z bazy danych. Więc jeśli chcesz JOIN dwie tabele, więc musisz mieć w swoimodniesienie StudentDTO na SubjectDTO.

public class StudentDTO { 

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

    // getters, setters 
} 

Więc SubjectDTO

public class SubjectDTO { 

    private String name; 
    private int room; 

    // getters, setters 
} 

I DAO może wyglądać następująco:

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(); 
     } 
     } 
    } 
} 

polecam sprawdzić kilka tutoriali.

Pozdrowienia

+0

Dzięki za odpowiedź .. Wygląda na to, że DTO jest odpowiedzią na ten problem –

-4

Ten wątek został już rozpoczęty na javaRanch (JDBC), chcą, by sprawdzić nie tracić wysiłku przed odebraniem pierwszy

+0

Niestety jeśli mogę odpowiedzieć na to pytanie na innym forum, to po prostu, że jestem nad projektem, który musi spełniać termin. –

Powiązane problemy