Java 我应该如何设计我的DAO层

Java 我应该如何设计我的DAO层,java,oop,dao,spring-jdbc,Java,Oop,Dao,Spring Jdbc,假设我想要一个能代表动物园的网页。应该有一个附件列表(大约一万个),并且可以通过三种方式显示: 所有附件 只有当前登录用户标记为收藏夹的存储模块 仅限当前登录的用户对其发表评论的机柜 在所有这些情况下,列表可能太长,无法放在单个页面上,因此应使用分页条将其划分为多个页面 为了便于搜索特定机柜,所有三种模式都应支持通过关键字进行额外过滤(机柜名称中的全文搜索)。例如,用户应能够显示标记为收藏夹的所有机柜,这些机柜的名称中包含给定字符串。当然,列表可能仍然很大,分页也适用于这里 问题是-如何设计

假设我想要一个能代表动物园的网页。应该有一个附件列表(大约一万个),并且可以通过三种方式显示:

  • 所有附件
  • 只有当前登录用户标记为收藏夹的存储模块
  • 仅限当前登录的用户对其发表评论的机柜
在所有这些情况下,列表可能太长,无法放在单个页面上,因此应使用分页条将其划分为多个页面

为了便于搜索特定机柜,所有三种模式都应支持通过关键字进行额外过滤(机柜名称中的全文搜索)。例如,用户应能够显示标记为收藏夹的所有机柜,这些机柜的名称中包含给定字符串。当然,列表可能仍然很大,分页也适用于这里


问题是-如何设计DAO层以避免代码重复和充满条件的意大利面代码?此外,将代码划分为抽象层/区域也可以,例如,用于构建最终SQL查询的代码不会不一致地分散在不同抽象层的许多不同类中。

编辑我的原始答案,因为我误读了您的标准。您的刀将与其他任何基本刀相同。对于这三个查询中的每一个,它(本质上)都有一个GET方法。如果用户希望在此之后缩小标准范围,我建议使用类似jquery的插件,假设DAO方法中返回的数据量不是惊人的巨大。该插件将允许您向每列添加过滤器,并在键入时进行更新,还具有排序、搜索和分页功能。

假设采用传统的请求/响应web应用程序样式,下面是一个示意图:

在DAO的支持代码中将各种过滤选项表示为类。让web客户端指定表示筛选选项的URL参数。您需要一种方法来确保每次请求时都发送过滤选项,或者将它们存储在用户会话中

将过滤参数映射到过滤选项,并将选项传递给DAO。在DAO的查询中,将过滤选项“扩展”到针对数据库的适当where claus中

对于分页,有分页“窗口”的概念。例如,您可以有一个类来表示起始行和要返回的行数。同样,将该类扩展为针对数据库执行的谓词


有其他方法可以实现这一点(可能是使用现有的一百万个框架中的一个),但如果我必须从头开始开发它,我会这样做。

DataTables看起来很酷,但不幸的是,我无法在我的应用程序中使用它,因为总共将有一万多个机柜。我只想在每次请求时从数据库中加载那些适合当前页面的框架。如果他不必从头开始实现这一点,你能说出几百万个框架中的几个吗?一些你喜欢的轻质的。谢谢你。我说了“也许”,可能在最后一句话中有点夸张。但是,带有PrimeFaces的JSF提供了一种解决方案(或者至少是要组装的部分)和DataTable组件及其延迟加载特性。在PrimeFaces网站上查看。你当然有,在我之前的评论中没有冒犯的意思。谢谢你的建议,没有冒犯你的意思。祝你好运