Какова общая практика внедрения расширенного поиска (фильтрации) в EJB BMP? - PullRequest
0 голосов
/ 16 ноября 2011

Я занимаюсь разработкой проекта с использованием Struts 1.3.8 + EJB 2.1.

У меня есть несколько навигационных jsp (есть какие-то таблицы, содержащие сущности).В меню навигации пользователь может выбрать условие фильтра для каждого столбца таблицы.Он выбирает оператор фильтра в раскрывающемся списке и вводит значение условия.

Столбцы имеют разные типы, включая строку, данные, целое число и т. Д.

Теперь я использую простой класс Condition, которыйинкапсулирует три значения (имя столбца, оператор и значение).

В сервлете действия я отправляю условия в соответствующий EntityBean, вызывая метод Finder.

Метод Finder использует класс QueryBuilder, который генерируетЗапрос SQL (практически он просто добавляет условия WHERE и проверяет данные).

Мне не нравится эта схема по нескольким причинам.

Во-первых, он использует сырой SQL в QueryBuilder, поэтому я должен реализовать проверку данных, чтобы предотвратить внедрение SQL.

Во-вторых, уровни представления и бизнес-уровни стали сильно связанными (презентация должна знать имена столбцов, используемые в БД, илиQueryBuilder должен знать имена столбцов, используемые в презентации).

Я могу использовать только версию EJB 2.1, а бины сущностей должны быть BMP.

Я хочу знать, есть ли какая-то хорошая практика для реализации вышемеханизм, или просто посмотреть некоторые полезные предложения по моей проблеме.

Спасибо за помощь.

1 Ответ

0 голосов
/ 16 ноября 2011

Для решения ваших проблем сначала:

1) PreparedStatement следует использовать в фоновом режиме, поэтому вам не нужно беспокоиться об этом.

2) Посмотрите на Fast Lane Reader , а затем написать API для фильтрации вместо использования имен столбцов.В этом случае вам придется написать SQL самостоятельно и использовать вышеупомянутое PreparedStatement

Но один вопрос будет состоять в том, сколько пользователей, сколько стоит каждый вызов и сколько у вас памяти.Недавно я написал приложение, которое извлекает десятки тысяч записей для пользователя и может занять больше минуты, чтобы обновить.К счастью, моя база пользователей очень мала, поэтому я выбрал внешнюю фильтрацию.Его начальная загрузка и от этого пользовательский опыт намного лучше.Мне также не нужно было показывать всегда актуальную информацию.

См. Методы поиска бинов сущности VS DAO? для вопроса о производительности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...