2011-11-16 39 views
0

我正在开发一个使用Struts 1.3.8 + EJB 2.1的项目。在EJB BMP中实现高级查找(筛选)的常见做法是什么?

我有几个导航jsp的(有一些表包含实体)。在导航菜单中,用户可以为每个表格列选择一个过滤条件。他在下拉列表中选择过滤器运算符并输入条件值。

列具有不同的类型,包括字符串,数据,等等整数

现在我使用一个简单的条件的类,它incapsulates三个值(列名,操作员和的值)。

在action servlet中,我通过调用Finder方法将sendind条件转换为相应的EntityBean。

搜索方法使用的QueryBuilder类,其产生的SQL查询(实际上它只是增加了那里的条件和验证数据)。

我不喜欢这个方案有几个原因。

首先,它在QueryBuilder中使用原始SQL,因此我必须实施数据验证以防止SQL注入。

其次表现层和业务层成为高耦合(演示文稿必须使用DB知道列名或QueryBuilder的必须使用演示知道列名)。

我只能使用EJB 2.1版本,而实体bean必须是BMP。

我想知道是否有一些很好的做法来实现上述机制,或只是看到一些有关我的问题的建议。

谢谢你的帮助。

回答

0

要首先解决您的问题:

1)PreparedStatement应在后台使用,因此你不需要担心。

2)看Fast Lane Reader,然后编写用于滤波的API而不是使用列名。在这种情况下,你就必须编写SQL自己,并使用PreparedStatement的注意

但有一个问题上面会多少用户,多么昂贵的是每个电话和多少内存你有。我最近编写了一个应用程序,为用户提供成千上万的记录,并且可能需要一分钟以上才能刷新。幸运的是,我的用户群非常小,所以我选择了前端过滤。它的初始负载和用户体验要好得多。我也不需要显示总是最新的信息。

请参阅Entity Bean finder methods VS DAO?了解性能问题。

相关问题