Файл: 1. Что такое Maven Для чего он нужен Как добавлять в проект библиотеки без него 2.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 30.11.2023

Просмотров: 162

Скачиваний: 4

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


Хотя HQL и SQL имеют некоторые различия, оба языка могут использоваться для выполнения различных операций в базах данных. HQL обычно используется для выполнения операций над объектами Hibernate, а SQL - для выполнения операций над таблицами базы данных.


  1. Что такое Query? Как передать в объект Query параметры?



Query - это интерфейс JPA, который используется для выполнения запросов к базе данных. Он предоставляет методы для управления запросами, получения результата и управления параметрами.

Для передачи параметров в объект Query необходимо использовать именованные или неименованные параметры. Именованные параметры определяются с использованием символа ":" перед именем параметра. Например, в запросе JPQL вы можете использовать именованные параметры следующим образом:
String jpql = "SELECT e FROM Employee e WHERE e.id = :empId";

Query query = entityManager.createQuery(jpql);

query.setParameter("empId", 1);
В этом примере мы создали именованный параметр ":empId" в запросе JPQL и установили его значение равным 1 с помощью метода setParameter().

Неименованные параметры определяются с использованием знака вопроса "?". Например:
String jpql = "SELECT e FROM Employee e WHERE e.id = ?1";

Query query = entityManager.createQuery(jpql);

query.setParameter(1, 1);
В этом примере мы создали неименованный параметр "?1" в запросе JPQL и установили его значение равным 1 с помощью метода setParameter() и указания индекса параметра (в данном случае 1).

Оба метода setParameter() могут быть использованы для передачи параметров в объект Query. Они принимают имя или индекс параметра и значение параметра, которое должно быть передано в запрос. Параметры также могут быть установлены путем вызова метода setParameter() с использованием объекта Parameter соответствующего типа.


  1. Какие можно устанавливать параметры в hbm2ddl, рассказать про каждый из них.



hbm2ddl - это инструмент в Hibernate, который позволяет автоматически создавать таблицы базы данных на основе настроек сущностей в Hibernate. Он позволяет генерировать DDL (Data Definition Language) скрипты для создания, обновления или удаления таблиц базы данных.
Параметры для настройки поведения hbm2ddl можно устанавливать в файле конфигурации Hibernate или через API Hibernate.
Вот некоторые из наиболее распространенных параметров hbm2ddl:

hibernate.hbm2ddl.auto: Определяет режим, в котором Hibernate должен выполнять обновления базы данных в соответствии с изменениями в сущностях.

Доступные значения:
validate: Hibernate проверяет соответствие между метаданными и схемой базы данных. Если метаданные не соответствуют схеме, Hibernate выдает исключение.

update: Hibernate выполняет обновления в базе данных, чтобы соответствовать метаданным. Hibernate добавляет новые таблицы, колонки и ключи, но не удаляет старые элементы, которые не описаны в метаданных.
create: Hibernate создает схему базы данных на основе метаданных. Если база данных уже существует, Hibernate удаляет ее и затем создает заново.
create-drop: Hibernate создает схему базы данных на основе метаданных. По завершении работы, Hibernate удаляет всю базу данных.
hibernate.hbm2ddl.import_files: Указывает список SQL-файлов, которые должны быть выполнены после создания схемы базы данных. Файлы могут содержать запросы для создания таблиц, добавления данных и т.д.
hibernate.hbm2ddl.charset_name: Определяет название кодировки, используемой при генерации SQL-запросов hbm2ddl.
hibernate.hbm2ddl.jdbc_metadata_extraction_strategy: Определяет стратегию, используемую Hibernate для извлечения метаданных из базы данных.

Доступные значения:
individually: Hibernate запросит метаданные для каждой таблицы по отдельности.
grouped: Hibernate запросит метаданные для всех таблиц в одном запросе.
hibernate.hbm2ddl.format_sql: Определяет, следует ли форматировать генерируемый SQL-код.

hibernate.hbm2ddl.delimiter: Определяет разделитель для выполнения нескольких SQL-запросов.
hibernate.hbm2ddl.schema_filter_provider: Определяет провайдер фильтров схемы, используемый для исключения определенных таблиц или столбцов из схемы базы данных.
hibernate.hbm2ddl.temp.use_jdbc_metadata_defaults: Определяет, должен ли Hibernate использовать настройки JDBC-метаданных для создания таблицы.


  1. Требования JPA к Entity-классам? Не менее пяти.



JPA определяет ряд требований, которые должны быть выполнены в Entity-классах:


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

  2. Класс должен быть помечен аннотацией @Entity. Это указывает JPA, что класс является сущностью, которую нужно сохранять в базу данных.

  3. Класс должен иметь уникальный идентификатор, который определяется аннотацией @Id. JPA использует идентификатор для уникальной идентификации сущности в базе данных.

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

  5. Класс должен быть сериализуемым, чтобы его можно было передавать между разными JVM.




  1. Жизненный цикл Entity в Hibernate? Рассказать. 



Жизненный цикл Entity в Hibernate представляет собой последовательность состояний объекта с момента создания и до его удаления из базы данных. Жизненный цикл Entity в Hibernate состоит из следующих состояний:


  1. Transient (Непостоянное состояние): В этом состоянии объект еще не связан с сессией Hibernate и не имеет идентификатора. Он создается в памяти и не имеет связи с базой данных.

  2. Persistent (Постоянное состояние): В этом состоянии объект связан с сессией Hibernate и имеет идентификатор, который определяется базой данных. Изменения, внесенные в объект в этом состоянии, будут сохранены в базу данных.

  3. Detached (Отсоединенное состояние): В этом состоянии объект отсоединен от сессии Hibernate, но имеет идентификатор, который был присвоен ему при сохранении в базе данных. Изменения, внесенные в объект в этом состоянии, не будут сохранены в базу данных до тех пор, пока он не будет снова связан с сессией Hibernate.

  4. Removed (Удаленное состояние): В этом состоянии объект связан с сессией Hibernate, но помечен как удаленный. При синхронизации с базой данных объект будет удален.


Жизненный цикл Entity в Hibernate управляется сессией Hibernate. Сессия отслеживает изменения объекта и управляет сохранением или обновлением его в базе данных. Все состояния Entity могут быть получены с помощью метода session.getlifecycle() или с помощью аннотации @EntityListeners, которая позволяет добавить слушатели для состояний жизненного цикла Entity.
DAO (Data Access Object) и SERVICE - это два слоя, используемые в приложениях на Java для управления доступом к данным и бизнес-логике соответственно.
DAO слой предназначен для работы с базами данных и предоставляет интерфейс для работы с данными. Он инкапсулирует все операции, связанные с доступом к данным, такие как создание, чтение, обновление и удаление данных. DAO слой содержит классы, которые содержат SQL-запросы и другие методы для доступа к базе данных. DAO классы обычно имеют CRUD-методы (Create, Read, Update, Delete), которые позволяют выполнить соответствующие операции с базой данных.
SERVICE слой, с другой стороны, предназначен для реализации бизнес-логики приложения. Он предоставляет интерфейс для взаимодействия с DAO слоем, а также обрабатывает все бизнес-правила, связанные с приложением. SERVICE слой может содержать классы, которые работают с несколькими DAO классами, выполняют проверку данных и принимают решения на основе бизнес-логики.

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

Goal в Apache Maven - это задача или команда, которая выполняется во время сборки проекта. Goal может быть вызван явно при запуске Maven из командной строки, или он может быть частью фазы сборки.

В Maven фаза сборки - это последовательность связанных goal'ов, которые выполняются в определенном порядке. Например, фаза сборки "package" включает goal'ы, которые компилируют исходный код, создают JAR-файл и т.д.

Maven поставляется с набором предопределенных goal'ов, таких как compile, test, package и т.д. Однако, пользователь может определить свои собственные goal'ы для выполнения специфических задач, например, для выполнения тестового набора или сборки и установки дополнительных зависимостей.

Goal в Maven обычно указывается в командной строке в формате "mvn
:", где
- это фаза сборки, а - это goal, который нужно выполнить. Например, чтобы выполнить goal для сборки JAR-файла, необходимо запустить команду "mvn package".

____________________________________________________________________________
Scope (область видимости) зависимостей в Apache Maven - это параметр, который определяет, как зависимость будет использоваться в проекте и как будет управляться Maven. Scope указывается в файле pom.xml для каждой зависимости.
В Maven есть 6 различных областей видимости зависимостей:

compile - зависимость включается в проект во время компиляции, тестирования и выполнения.
provided - зависимость доступна во время компиляции и тестирования, но не включается в итоговый пакет, потому что она уже доступна в среде выполнения. Эта область видимости, например, может использоваться для зависимостей, которые поставляются с контейнером сервлетов.
runtime - зависимость необходима только во время выполнения, например, драйвер JDBC.

test - зависимость используется только во время тестирования, например, библиотека для написания тестов.

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

import - эта область видимости используется только в файле pom.xml и указывает на зависимости, которые необходимы для импорта в текущий проект. Обычно, это зависимости из родительского проекта, которые нужны для сборки проекта-потомка.
Установка правильной области видимости для зависимости помогает уменьшить размер итогового пакета, ускорить сборку проекта и избежать конфликтов зависимостей.

____________________________________________________________________________

Plugin (плагин) в Apache Maven - это инструмент, который позволяет расширять функциональность Maven, добавляя новые goal'ы, фазы сборки и задачи.
Плагины используются для автоматизации задач, которые не входят в стандартный набор фаз и goal'ов Maven, например, для генерации кода, выполнения тестов, деплоя проекта и т.д.
Каждый плагин в Maven - это отдельный JAR-файл, который содержит свой собственный код, настройки и описания goal'ов. При использовании плагина, Maven автоматически загружает его из локального или удаленного репозитория и использует его в проекте.
Плагины в Maven могут быть использованы как в командной строке, так и в файле pom.xml. Чтобы использовать плагин в командной строке, нужно выполнить команду "mvn
:". Например, чтобы выполнить цель "compile" из плагина "maven-compiler-plugin", нужно выполнить команду "mvn compiler:compile".

____________________________________________________________________________
Аннотация @Table используется в JPA (Java Persistence API) для определения сопоставления класса с таблицей базы данных. В аннотации @Table можно указать несколько параметров:
name - имя таблицы, которая будет использоваться для хранения данных этого класса. По умолчанию, имя таблицы совпадает с именем класса.
schema - имя схемы базы данных, в которой должна быть создана таблица. Если схема не указана, используется значение по умолчанию.
catalog - имя каталога базы данных, в котором должна быть создана таблица. Если каталог не указан, используется значение по умолчанию.
uniqueConstraints - ограничения уникальности для таблицы. Этот параметр используется для указания ограничений, которые должны быть соблюдены при создании таблицы.
indexes - индексы для таблицы. Этот параметр используется для указания индексов, которые должны быть созданы для таблицы.