Wie kann ich ein DAO-Objekt zu einer Eigenschaft eines anderen DAO machen?DAO-Implementierung: Ein DAO-Objekt zu einer Eigenschaft eines anderen DAO machen
sagen, dass ich ein Objekt Employee mit einer Abteilung Eigenschaft haben
public class Employee {
public Department;
//setter and getters
}
Ich hatte diese EmployeeDAO und DepartmentDAO Schnittstellen mit entsprechenden Implementierungen
Und ich hatte DAOFactory
public abstract class DAOFactory {
// db connection instantiation here
public IEmployeeDAO getEmployeeDAO() {
return new EmployeeDAOImpl(this);
}
public IDepartmentDAO getDepartmentDAO() {
return new DepartmentDAOImpl(this);
}
}
Ich hatte ein Servlet, wo dieses DAOfa instanziiert ctory
public class EmployeeController extends HttpServlet {
public EmployeeController() {
super();
DBUtils dbInstance = DBUtils.getInstance("mysql");
System.out.println("DAOFactory successfully obtained: " + dbInstance);
// Obtain UserDAO.
employeeDAO = dbInstance.getEmployeeDAO();
departmentDAO = dbInstance.getDepartmentDAO();
jobDAO = dbInstance.getJobDAO();
}
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
employees = employeeDAO.findAll();
request.setAttribute("employees", employees);
}
meine Frage ist, wie kann ich die Abteilung Objekt innerhalb des employeeDAO oder ihre Durchführung Karte, wenn ich die findAll Methode des employeeDAO nennen?
Ich hatte in meinem Versuch, so etwas wie dies die Ergebnisse zur Karte:
private Employee map(ResultSet rs) throws SQLException {
Employee employee = new Employee();
employee.setEmployeeID(rs.getInt("EMPLOYEE_ID"));
employee.setFirstName(rs.getString("FIRST_NAME"));
employee.setLastName(rs.getString("LAST_NAME"));
Department department = new DepartmentDAOImpl().getDepartmentByID(rs
.getInt("DEPARTMENT_ID"));
employee.setDepartment(department);
return employee;
}
Aber ich denke, das ist ein falscher Ansatz. Kann mir jemand dabei helfen?
, warum dies der falsche Ansatz sein sollte? Funktioniert etwas nicht wie erwartet? (Obwohl ich JPA anstelle der manuellen Objekt-Mapping in Betracht ziehen würde, da es den ganzen dao für Sie tut. Und während es eine Abstraktion auf höherer Ebene als das Erweitern von HttpServlets findet) – zapl
Weil ich direkt eine Instanz der DAO-Implementierung erstelle, die dies tun soll durch die DAO-Schnittstelle ausgeblendet werden Was ich wollte, ist dies zu ermöglichen, sobald ich den Mitarbeiter anrufeDAO.findAll(); Ich habe auch einige Artikel über JPA gesehen. Ich plane, es in meinen zukünftigen Projekten zu implementieren. –