我有以下操作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);
}
答案 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