Главная » Просмотр файлов » Пояснительная записка к диплому

Пояснительная записка к диплому (1228397), страница 8

Файл №1228397 Пояснительная записка к диплому (Разработка АРМ складского рабочего для ДВЖД - филиала) 8 страницаПояснительная записка к диплому (1228397) страница 82020-10-06СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 8)

Query query = EntityManager.createQuery("select s from Adress s where s.ID_adress like :parameter");

EntityManager – это менеджер сущности связанный с единицей постоянства, через которую и осуществляются взаимодействия с базой данных. И все операции с базой данных в том числе отправка запроса, операции сохранения, обновления и удаления данных выполняются через методы вышеуказанного менеджера [16].

Для выполнения этого запроса достаточно выполнить команду, возвращающую список записей, найденных по установленному запросу:

query.getResultList();

Однако для постраничной навигации необходимо проводить настройку отображаемых записей, т.е. вывод записей из определённого диапазона. Для этого из созданного запроса вызываются два метода, первый для установки первой отображаемой записи на странице, второй для установки количества записей для вывода после отмеченной первой. Реализация вышеописанного кода, с учётом того что данные о том каким записи выводить хранятся в массиве range, будет выглядеть следующим образом:

query.setFirstResult(range[0]);

query.setMaxResults(range[1]-range[0]);

Также для механизма постраничной навигации важно реализовать подсчёт количества найденных записей. Помимо поиска записей по таблице, нужно также предусмотреть подсчёт результатов поиска, для механизма постраничной навигации. Подсчёт результатов поиска реализуется добавление в SQL запрос функции Count:

Query query = EntityManager.createQuery("select count (s) from Adress s where s.searchField like :parameter");

Этот запрос содержит в себе параметр searchField, определяющий поле по которому выполняется поиск, а также parameter, который содержит информацию о том какое значение ищет пользователь. Для установки параметра используется метод:

query.setParameter("param", filter);

При этом параметр может быть предварительно настроен, таким образом, чтобы использовать возможности синтаксиса команды like.

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

((Long) query.getSingleResult()).intValue();

В этой записи в результате выполнения метода получения одного результата возвращается объект, который в последствии переводится в тип Long и после конвертируется в целое число.

Помимо прочего контроллер фасада модели должен реализовывать операции создания и редактирования записей из таблицы адресов. Для того чтобы создать запись используется следующая команда:

EntityManager.persist(entity);

В роли entity выступает экземпляр модели хранящий информацию о записи которую пытается создать пользователь, информация заносится в модель напрямую с формы взаимодействия с пользователем.

Для обновления применяется следующая команда:

EntityManager.merge(entity);

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

После реализации вышеуказанных возможностей следует обеспечить полноту объявления контроллера. Для этого нужно задать конструктор с параметром.

Конструктор с параметром устанавливает значения поля текущего класса на тот который передан в качестве параметра. Аналогичный метод был описан для конструктора модели.

Также следует определить метод поиска сущности по ключу для возможности найти объект класса с заданным ключом либо установить, что такого объекта не существует в выборке. Этот метод выглядит следующим образом:

getEntityManager().find(entityClass, id);

В дополнение к вышеуказанному для корректной работы контроллера фасада модели следует указать объявление @Stateless, это связано с тем что контроллер фасада модели не имеет своего ассоциируемого с пользователем состояния и имеет длительный жизненный цикл что обеспечивает удобство использования для разработчика [20].

Также в контроллер фасада модели следует записать объявление @PersistenceContext, с указанием в скобках имени единицы постоянства с которой ведётся работа. Это объявление укажет что следующее за ним поле является менеджером сущности, ссылающимся на указанную в объявлении единицу постоянства, что и обеспечит в дальнейшем корректное обращение менеджера к базе данных.

Однако нетрудно заметить, что некоторые функции применимы ко всем контроллерам фасада, в связи с этим следует выделить общий функционал в один абстрактный класс, от которого будет наследовать каждый контроллер фасада модели и реализовывать некоторые специфичные для него методы.

Таким образом методы поиска записей с учётом параметров, создания, редактирования, нахождения объекта класса модели, метод получения менеджера сущности, а также конструктор перейдут в абстрактный фасад. При этом методы должны быть изменены для абстрагирования от конкретного класса. Для этого в классе абстрактного фасада вводится поле объекта неопределённого класса, этот класс определяется классом наследником абстрактного фасада и все операции в классе абстракции производятся через это поле. Для задания этого поля и определения его типа в каждом контроллере фасада создаётся конструктор по умолчанию в котором определяется обращение к родительскому методу конструктора с параметром и в качестве параметра задаётся класс модели, с которой ведётся работа. Стоит также заметить, что поле менеджера сущности не объявляется в абстрактном классе и метод его получения только объявляется. Реализация этого метода с возвращение конкретного менеджера сущности будет осуществляться в рамках каждого отдельно взятого контроллера фасада модели.

Наиболее сложным в реализации является метод поиска абстрагированный от конкретной сущности. Для его реализации следует передавать в него следующие параметры:

– название таблицы;

– список параметров, по которым ведётся поиск;

– список значений параметров для поиска;

– тип поискового фильтра по дате;

– область поиска.

Указанный метод для начала должен сформировать запрос в виде строки, после чего осуществить установку параметров и задание области поиска. При формировании запроса сначала выполняется проверка наличия значения для поиска по соответствующему параметру. В случае если значение параметра задано, и рассматриваемый параметр не является первым не пустым параметром, выполняется вставка логической связки. Далее, если значение параметра для поиска задано выполняется приписка строки, отвечающей за поиск по данному параметру. Такой же метод должен вызываться и для подсчёта общего количества результатов поиска. В связи удобнее вынести его основу в отдельный метод который будет вызываться в соответствующих методах, отвечающих за поиск области значений и подсчёт общего числа записей, найденных при заданном поисковом фильтре.

Подробно, этот метод и связанные с ним методы рассмотрены в приложении А.2, описывающем код абстрактного фасада. В этом же приложении приводится итоговый код контроллера фасада модели адресов.

Полученная диаграмма классов, состоящая из абстрактного контроллера фасада, и контроллера фасада адреса приведена на рисунке 3.

Рисунок 3 – Диаграмма классов для фасада адресов

На этом построение контроллера фасада для сущности адресов закончено, также создана функциональная база для создания остальных контроллеров фасада. Остальные контроллеры фасада строятся по аналогии с контроллером фасада адреса, а также содержат аналогичные методы и их построение рассмотрено не будет.

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

3.3.3 Создание класса для постраничной навигации

Этот класс будет размещён в пакете, вложенном в пакет контроллеров представлений, так как он является утилитарным для этих контроллеров элементом и называться будет ViewControllers.util. Также стоит отметить что данный класс следует реализовывать как абстрактный, в связи с тем, что большая часть его методов абстрагирована от конкретной сущности и в то же время требует использования в большей их части. Некоторые его методы будут описаться на конкретную модель и будут требовать уникальной реализации для каждого отдельного класса, поэтому они будут объявлены как абстрактные методы, что потребует от класса в котором будет реализовываться обработчик постраничной навигации, перегрузки и определения этих методов с учётом своих особенностей.

Для постраничной навигации ключевыми являются два элемента количество элементов на странице и номер текущей страницы, соответственно для них производится определение двух защищённых полей. Также для корректной работы с постраничной навигацией потребуется метод определения первой и последней отображаемой на странице записи, для определения границ выборки при формировании SQL запроса.

Номер первой записи на странице можно получить простым умножением номера текущей страницы на максимальное количество записей на ней. Следует заметить, что нумерация для программы и для базы данных осуществляется с нуля, именно поэтому такой метод определения пригоден для использования. Для определения номера последней записи страницы нужно прибавить к номеру первой записи количество допустимых записей и отнять единицу, после чего нужно проверить не превышает ли полученное значение общего числа страниц, и если превышает, то установить номер последней записи страницы как общее количество записей.

Критичными для постраничной навигации являются методы определения наличия следующей и предыдущей страницы и изменения номера страницы.

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

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

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

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

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

Схема созданного класса приведена на рисунке 4.

Рисунок 4 – Схема класса

обработчика

постраничной навигации

Полученный код для класса постраничной навигации приведён в приложении А.3.

3.3.4 Создание общего вспомогательного класса

Этот класс также будет располагаться в пакете ViewControllers.util и будет включать в себя следующие методы:

– добавление сообщения о ошибке;

– добавление сообщений о ошибке;

– добавление сообщения о успехе;

– метод проверяющий строку на пустоту;

– метод возвращения списка объектов для выбора.

Последний из описанных методов реализуется для возможности помещения в выпадающий список объектов модели и постановки им в соответствие некоторой строки для возможности выбора. В этом методе сначала определяется размер массива списка объектов, после чего под него выделяется память. Далее определяется условие выбора (выбор одного объекта или многих), и если выбирается один объект, то в качестве первого элемента списка создаётся пустая запись. После подготовки списка, осуществляется его заполнение и в конце он возвращается в место вызова метода.

Для добавления сообщения об ошибке или успехе создаётся переменная типа сообщения представления, в которую помещается сообщение, соответствующее содержанию события и определяется тип события, после чего в текущий экземпляр представления производится добавление определённого ранее сообщения. Сообщения об ошибке также могут вызываться из-за возникновения исключений и это требует выделения сообщения о ошибке исключения, после чего вызывается стандартный метод добавления сообщения об ошибке. Также может возникнуть ситуация возникновения нескольких ошибок, в этом случае в методе просто запускается цикл в котором вызывается метод добавления одной ошибки для каждой из поступивших ошибок.

Характеристики

Тип файла
Документ
Размер
744,54 Kb
Высшее учебное заведение

Список файлов ВКР

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6552
Авторов
на СтудИзбе
299
Средний доход
с одного платного файла
Обучение Подробнее