假设,您有一个应用程序,其中列出了应用程序中的用户。理想情况下,如果您在 Java 中编写代码来实现此目的,无论您的 UI 层是什么,我认为您都会编写从数据库检索结果集并将其映射到应用程序对象的代码。因此,在这种情况下,您正在查看 ORM/数据层执行其操作并创建“用户”对象列表。
假设您的 User 对象如下所示:
public class User {
private String userName;
private int userid;
}
您现在可以在任何 UI 中使用此“用户”对象列表。 ( Swing/网络应用程序)。 现在,想象一个场景,您必须列出用户名和部门或其他内容的计数,这是网络应用程序中非常具体的屏幕。所以你正在寻找这样的对象结构:
public class UserViewBean {
private String userName;
private int countDepartments;
}
最简单的方法是编写 SQL 来在一个查询中检索部门计数和用户名。如果我让你写这样一个查询,你会在哪里有这个查询?在你的jsp中?但是,如果您在 MVC 框架中执行此操作,您是否会将此查询移动到数据层,获取结果集,将其转换为 UserViewBean 并将其发送到请求范围内的 jsp?如果您直接将查询写入 jsps/如果您直接在 JSP 中使用连接,这不是一个坏习惯吗?
我知道,有些人可能会说,‘嘿,你的对象组合错了!如果部门链接到用户,您需要在用户对象中创建部门列表' - 是的,我同意。但是,考虑一下这种情况 - 比如说,除了这个屏幕之外,我不需要应用程序中其他任何地方的部门计数信息。您是说无论我从数据库加载 User 对象,我都必须加载依赖项对象列表,即使我不会使用它们?您的对象图能保持所有关系完整性多久?是的,我确实知道您出于这个原因而拥有 ORM,以便您获得延迟加载之类的好处,但我没有使用 ORM 的特权。
这里的底线问题是:
如果 JSP 仅服务于一个屏幕,您会将 sql 写入到 JSP 中吗? 或者
你会创作一个贫血的物体吗 迎合您的观点并使 你的业务层返回这个 此屏幕的对象 - 只是为了制作 看起来有点 OOish? 或
- 无论您的屏幕是什么 要求,你会撰写你的 对象,使得对象图 已加载,您将得到 该列表的大小?
这里的最佳实践是什么?
最佳答案
我永远不会将 SQL 放入 JSP 中。我会使用 Spring MVC 或 Struts Controller 或 servlet 来包含所有此类逻辑。它允许更好的错误处理等(当查询失败时,您可以转发到错误页面)。
如果您确实必须这样做,请使用 JSTL SQL tags .
关于java - 在 JSP 中使用 sql - 最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075279/