我应该创建一个模型&在我的Java Web应用程序中DAO为此?

时间:2010-09-09 15:12:03

标签: java jsp web-applications servlets

我有以下操作servlet,并且想知道我是否应该创建一个名为supervisor的模型和一个相应的supervisorDAO,就像我为程序所做的那样? programDAO将多个程序模型bean放入返回的arraylist中。对于主管,我使用通用输入/输出数据库实用程序来获取任何传入的SQL字符串的hashmaps(retALM)的arraylist。管理员列表用于在html表单上创建选择下拉列表。

我担心的是将sql字符串存储在action servlet中。如果我有User模型和UserDAO类,我不确定它是否需要创建一个supervisor模型和DAO。实际上在输入这篇文章之后,我进一步相信这不是正确的方法。因此,要么保留下面的方式,要么添加supervisor SQL调用以获取UserDAO类中的主管列表,因为用户可以是主管。我也欢迎其他批评我的行动servlet方法。

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 个答案:

答案 0 :(得分:1)

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

我还建议使用像JPA或JDO这样的持久性API来访问您的对象。为每种类型的数据访问构建自己的SQL都很繁琐,容易出错,而且往往效率低下。

与检索数据的方式不同的是您如何建模数据的问题。由于主管是一个用户,可能具有用户的所有属性(名称,员工ID,主管),因此将这些属性存储在存储用户数据的同一个表中可能是有意义的。

答案 1 :(得分:0)

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

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