2015-11-09 4 views
0

Сценарий - ввод пользователя (диапазон дат, тип отчета) берется с JSP-страницы &, переданной в сервлет, а затем в java.Лучший способ генерации отчета Jasper с использованием Java/JSP/Servlet

Я хочу спросить, должен ли я -

  1. Использование MySQL запросов в Java & затем поместить значения в яшмы с помощью HashMap? или
  2. Использовать mysql-запрос в самой jasper & просто предоставить подключение к данным с помощью java?

Основная проблема заключается в том, какой подход лучше с точки зрения производительности, надежности, будущих изменений?

ответ

0

Хорошо, ваш вопрос настолько общий. Каков ваш подход и ваша бизнес-модель? Если ваш запрос имеет такую ​​сложность, кажется, что лучше использовать sql непосредственно в jasper, и он будет быстрее, чем использование значений в jasper для генерации отчета. Но в парадигме программирования есть только один модуль, чтобы знать о подключении к базе данных, и это ваша доменная сторона программы. Я бы предпочел не инициализировать соединение с базой данных в вашей конфигурации яшмы, поэтому просто используйте значения в своей яшме и сопоставьте их с Hashmap. Вы можете использовать из предыдущего соединения и модуль базы данных (модуль, который использует для субъектов или объектов домена) в вашей программе и получать данные желания и отобразить их в отчет

+0

Спасибо за ценные вклады :) Я отредактировал вопрос. –

0

Использования MySQL запрос в Java & затем положить значение в яшме с помощью Hashmap?

Это звучит безумно, чистый Hashmap не является источником данных, поэтому вы не сможете его повторить.

Ваши решения могут быть:

  1. Использование MySQL запросов в Java & затем поместить значения в JRDatasource, передать источник данных Джасперу отчет

  2. Использование MySQL запрос в яшмы сам & просто предоставляют данные соединение с использованием java

  3. Сгенерируйте запрос mysql в Java и передайте запрос и соединение данных с яшмой доклад

  1. Единственный сценарий, который я хотел бы использовать это, когда данные не могут быть извлечены простым способом из одного запроса, все данные не доступны в запросе или данных уже имеется в наличии память (. пользователи выбрали строки в таблице).

  2. При разработке отчетов это «нормальный» и, возможно, самый быстрый, такие инструменты, как iReport, дают вам возможность автоматически извлекать поля из запроса и просматривать отчет с помощью живого подключения к данным (вам не нужно компилировать и запустите свой код). Таким образом, разработчик отчета также является автономным, очень полезным в крупных проектах.

  3. Когда запрос получает сложную (зависит от нескольких переменных), запрос может передаваться непосредственно как параметр (или несколько параметров). В докладе выражение по умолчанию для запроса может быть использован, чтобы иметь преимущество 2.

Так обычно используется Metod 2.

производительность: если данные уже находятся в памяти 1 быстрее (без sql), иначе вы, вероятно, будете потреблять больше памяти (следовательно, при загрузке JRDataSource). Однако я не проводил тщательного тестирования.

грубости, в большей степени зависит от вашего кода, то метод

будущих изменений, 2 имеет преимущество изменения только в одном месте «докладе», вам не нужно даже открыть проект Java ,

0

Если мое понимание верное, приложение выбрало фильтры для отчетов. Эти условия фильтрации передаются в приложение в HTTP Servlet запрос, и вы хотите, чтобы выбрать между

  1. предоставления запроса в < QueryString> и отображение полей в jrxml файле проекта, с только требуется, когда параметры состояния передается от Java
  2. осуществляет извлечение содержания отчета внутри Java и передать Java Beans в jrmxl файл

Я хотел бы предложить, чтобы согласовать с общей стратегией проектирования фоновым проекта для извлечения данных из БД.

Если ваши отчеты относительно просты, и приложение уже имеет полноценную реализацию ORM, используйте второй подход. Это будет относительно просто в начальной реализации, а также в реализации любых будущих запросов на изменение.

Если это не так и SQL-запросы для генерации отчетов динамичны и довольно сложный, я бы предложил продолжить вариант 2.

  • Написать запросы (строка Builder) для извлечения данных отчета в Java или сохранить их в качестве функций/процедур в БД
  • заполнить коллекцию Java Beans и передать его в JasPer Report Engine

любой подход не может иметь какой-либо существенной разницы производительности до тех пор, как приложение работает на сервер приложений с достойными спецификациями. Если производительность критическая, а текущие ресурсы ограничены, я бы предложил - запускать отчеты как отдельное приложение в отдельном JVM - отдельном сервере отчетов и приложениях db и использовать инструменты репликации БД для данных синхронизации по ним. Создание огромных сложных отчетов, как правило, замедляет скорость работы приложения.

Смежные вопросы