代码之家  ›  专栏  ›  技术社区  ›  jeff

我应该在javaweb应用程序中为此创建一个模型&DAO吗?

  •  1
  • jeff  · 技术社区  · 14 年前

    supervisor 还有一个和我一样负责节目的主管?programDAO将多个程序模型bean放入返回的arraylist中。对于监管者,我使用一个通用的输入/输出数据库实用程序来获取任何传入的SQL字符串的hashmaps数组列表(retram)。supervisor列表用于在html表单上创建select下拉列表。

    我所关心的是在actionservlet中存储sql字符串。如果我有一个用户模型和UserDAO类,我不确定是否有必要创建一个主管模型和DAO。事实上,在打了这篇文章之后,我进一步认为这不是正确的方法。因此,它是要么离开它的方式,我有它下面或添加 SQL调用以获取UserDAO类中的主管列表,因为用户可以是主管。我也欢迎下面对我的ActionServlet方法的其他批评。

    public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, 
        IOException {
        ProgramDAO prgDAO = new ProgramDAO();
        STKUser authenticatedUser = (STKUser) request.getSession().getAttribute("STKUserSession");
        List programs = null;
        List supervisors = null;
    
        try {
            programs = prgDAO.getProgramList(authenticatedUser);
        } catch (DAOException e) {
            request.setAttribute("message", e);
        }
    
        String strSQL = "SELECT DISTINCT phonebook.badge, phonebook.lname, phonebook.fname FROM phonebook 
            WHERE phonebook.badge IN (SELECT DISTINCT phonebook.ata_badge FROM phonebook WHERE 
            phonebook.dept='" + authenticatedUser.getDepartment() + "') ORDER BY lname";
        supervisors = General_IO.retALM(strSQL);
    
        request.setAttribute("supervisors", supervisors);
        request.setAttribute("programs", programs);
        RequestDispatcher view = request.getRequestDispatcher("views/commitment_template.jsp");
        view.forward(request, response);
    }   
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Qwerky    14 年前

    如果您的主管是用户并且您有一个UserDAO,那么也许您的UserDAO应该有一个getSupervisors()方法,或者一个getSupervisors(String dept)方法。

    从来没有,从来没有,从来没有通过字符串连接构造SQL,它只是要求 http://en.wikipedia.org/wiki/SQL_injection

        2
  •  1
  •   NamshubWriter    14 年前

    我建议你读一下 DAO pattern . 简而言之,它用于抽象出访问数据的方式。如果使用得当,servlet不必包含SQL。

    与如何检索数据不同的是如何对数据建模的问题。由于supervisor是一个用户,可能具有用户的所有属性(姓名、雇员ID、主管),所以将这些属性存储在存储用户数据的同一个表中可能是有意义的。