2012-05-29 84 views
8

Actualmente estoy aprendiendo a usar el patrón Dao en mi proyecto. Lo sé, una tabla es equivalente a una Dao, ¿estoy en lo cierto? al igual que StudentDao, SubjectDao.cómo crear un DAO para unir tablas?

Cada Dao realiza CRUD operaciones en sus tablas asociadas, pero mi pregunta es, ¿cómo voy a crear un DAO para las tablas unidas? digamos que tengo una consulta para unir el estudiante y la tabla de materias, entonces ¿cómo creo un DAO para eso?

¿Debo colocarlo en el StudentDao? o al SubjectDao? o hay una buena práctica en ese tipo de situación?

Respuesta

9

DAO - Data Access Object es Object que sólo debe comunicarse con la base de datos. Por lo tanto, si desea JOIN dos tablas, debe tenerla en su referencia DTO Object StudentDTO en SubjectDTO.

public class StudentDTO { 

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

    // getters, setters 
} 

Así, SubjectDTO

public class SubjectDTO { 

    private String name; 
    private int room; 

    // getters, setters 
} 

Y DAO puede tener este aspecto:

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

te recomiendo comprobar algunos tutoriales.

Saludos

+0

Gracias por responder .. Parece que DTO es la respuesta a este problema –

-4

Este hilo ya se ha iniciado en JavaRanch (JDBC), que desee comprobar su no perder su esfuerzo antes de contestar primera

+0

Lo siento si tengo la oportunidad de publicar esta pregunta en otro foro, es sólo que estoy en un proyecto que necesita para cumplir con el plazo. –