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

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

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

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

Добавлен: 09.11.2023

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

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

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


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

2. Как добавить dependency в Maven? Для чего они нужны? Откуда они скачиваются?

3. Основные фазы проекта под управлением Maven?

4. Что такое JDBC? Какие классы/интерфейсы относятся к JDBC?

5. Для чего нужен DriverManager?

6. Что такое Statement, PreparedStatement, CallableStatement?

7. Что такое sql-injection?

8. Что такое ResultSet? Как с ним работать?

9. Рассказать про паттерн DAO.

10. Что такое JPA?

11. Что такое ORM?

12. Что такое Hibernate?

13. В чем разница между JPA и Hibernate? Как связаны все эти понятия?

14. Какие классы/интерфейсы относятся к JPA/Hibernate?

15. Основные аннотации Hibernate, рассказать.

16. Чем HQL отличается от SQL?

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

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

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

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

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


Фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах на языке POM(Project Object Model), являющемся подмножеством XML. Проект Maven издаётся сообществом Apache Software Foundation, где формально является частью Jakarta- Project.

Фреймворк (Это каркас программной системы (или подсистемы). Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое ПО, облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого API.)  для автоматизации сборки проектов, специфицированных на XML-языке POM(Project Object Model).

Главное преимущество Maven
 — это управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек. Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями, что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
Добавить самому - project settings – Libraries
Области видимости зависимостей.
Области видимости (scope) зависимостей (dependency) в maven. Может быть указана в секкции dependency файла pom.xml.
compile - область видимости по умолчанию. Используется, когда область видимости явно не указана. Компилирует зависимости, доступные во всех classpath проекта.

provided - эта область видимости очень похожа на compile, но показывает, что JDK или среда исполнения должна предоставить эти зависимости во время выполнения.

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

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

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

import (Maven версии 2.0.9 или выше) - эта область видимости используется только в зависимости типа pom в секции <dependencyManagement>. Она показывает, что указанный pom должен быть заменён зависимостями из pom'a, который указан в dependencyManagement.


  1. Как добавить dependency в Maven? Для чего они нужны? Откуда они скачиваются?

Как правило, большинство популярных библиотек находятся в центральном репозитории, поэтому их можно прописывать сразу в раздел dependencies вашего pom-файла Вся структура проекта описывается в файле pom.xml (POMProject Object Model)
И
спользуемые в проекте библиотеки необходимо включить в сборку. Для решения данной задачи в maven-проекте необходимо использовать зависимость dependency, устанавливаемые в файле pom.xml, где для каждого используемого в проекте артефакта необходимо указать :



  • параметры GAV (groupId, artifactId, version) и, в отдельных случаях, «необязательный» классификатор classifier;

  • области действия зависимостей scope (compile, provided, runtime, test, system, import);

  • месторасположение зависимости (для области действия зависимости system).

Параметры GAV


  • groupId - идентификатор производителя объекта. Часто используется схема принятая в обозначении пакетов Java. Например, если производитель имеет домен domain.com, то в качестве значения groupId удобно использовать значение com.domain. То есть, groupId это по сути имя пакета.

  • artifactId - идентификатор объекта. Обычно это имя создаваемого модуля или приложения.

  • version - версия описываемого объекта. Для незавершенных проектов принято добавлять суффикс SNAPSHOT. Например 1.0.0-SNAPSHOT.
Значения идентификаторов groupId и artifactId подключаемых библиотек практически всегда можно найти на сайте www.mvnrepository.com. Или аналоги других производителей типа Commons IODependency Information (apache.org). Виды Maven-репозиториев
Стоит еще раз упомянуть Мавен-репозиторий, потому что их на самом деле у нас два — внешний (глобальный) и локальный, у тебя на компьютере. Все библиотеки, которые ты добавляешь в свои проекты, сохраняются в локальном репозитории. Когда Maven добавляет необходимую зависимость в проект, он сначала проверяет локальный репозиторий на наличие такой библиотеки, и только если не находит ее там — обращается к внешнему.


  1. Основные фазы проекта под управлением Maven?

Процесс построения приложения называют жизненным циклом Maven-проекта, и состоит он из фаз (phase). Посмотреть на них можно в IDEA, нажав на Maven>example>Lifecycle в правом верхнем углу: Как видишь, существует 9 фаз:

  1. clean — удаляются все скомпилированные файлы из каталога target (место, в котором сохраняются готовые артефакты);

  2. validate — идет проверка, вся ли информация доступна для сборки проекта;

  3. compile — компилируются файлы с исходным кодом;

  4. test — запускаются тесты;

  5. package — упаковываются скомпилированные файлы (в jar, war и т.д. архив);

  6. verify — выполняются проверки для подтверждения готовности упакованного файла;

  7. install — пакет помещается в локальный репозиторий. Теперь он может использоваться другими проектами как внешняя библиотека;

  8. site — создается документация проекта;

  9. deploy — собранный архив копируется в удаленный репозиторий.


I. Prepare-resources(Копирование ресурсов):

1.clean — удаляются все скомпилированные файлы из каталога target (место, в котором сохраняются готовые артефакты);

2.validate — идет проверка, вся ли информация доступна для сборки проекта;

II. Compile(компиляция):

3.compile — компилируются файлы с исходным кодом;

4.test — запускаются тесты;

III. Package(Создание пакета):

5.package — упаковываются скомпилированные файлы (в jar, war и т.д. архив);

6.verify — выполняются проверки для подтверждения готовности упакованного файла;

IV. Install(Установка):

7.install — пакет помещается в локальный репозиторий. Теперь он может использоваться другими проектами как внешняя библиотека;

8.site — создается документация проекта;

9.deploy — собранный архив копируется в удаленный репозиторий.

Все фазы выполняются последовательно: нельзя запустить, скажем, четвертую фазы, пока не завершены фазы 1-3.



4.Что такое JDBC? Какие классы/интерфейсы относятся к JDBC?
JDBC - Java Data Bace Connectivity(возможность подключения баз данных на джаве) — платформенно независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE.

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

  • JDBC – Java DataBase Connectivity – соединение с базами данных на Java. Это стандарт взаимодействия с БД. Его интерфейс поставляется в стандартной JDK в виде пакета java.sql. Какой бы библиотекой для работы с базой данных вы ни пользовались, в ее основе почти всегда лежит низкоуровневый JDBC. Создание соединения с БД.

  • Создание SQL выражений.

  • Выполнение SQL – запросов.

  • Просмотр и модификация  полученных записей

JDBC API состоит из следующих элементов:

  • Менеджер драйверов (Driver Manager)
    Этот элемент управляет списком драйверов БД. Каждой запрос на соединение требует соответствующего драйвера. Первое совпадение даёт нам соединение.

  • Драйвер (Driver)
    Этот элемент отвечает за связь с БД. Напрямую работать с ним нам приходится крайне редко. Вместо этого мы чаще используем объекты DriverManager, которые управляют объектами этого типа.

  • Соединение (Connection)
    Этот интерфейс, обеспечивающий нас методами для работы с БД. Все взаимодействия с БД происходят исключительно через Connection.

  • Выражение (Statement)
    Для подтверждения SQL-запросов мы используем объекты, созданные с использованием этого интерфейса.


  • PreparedStatement;

  • CallableStatement;



  • Результат (ResultSet)
    Экземпляры этого элемента содержат данные, которые были получены в результате выполнения SQL – запроса. Он работает как итератор и “пробегает” по полученным данным.

  • Исключения (SQL Exception)
    Этот класс обрабатывает все ошибки, которые могут возникнуть при работе с БД.

5. Для чего нужен DriverManager?

DriverManager - это синглтон (Паттерн Singleton гарантирует, что у класса есть только один экземпляр, и предоставляет к нему глобальную точку доступа), который содержит информацию о всех зарегистрированных драйверах. Метод getConnection на основании параметра URL находит java.sql.Driver соответствующей базы данных и вызывает у него метод connect.

Connection connection = DriverManager.getConnection(url, user, password) ;

  1. Что такое Statement, PreparedStatement, CallableStatement?

Как только соединение установлено, мы можем взаимодействовать с базой данных. Интерфейсы JDBC Statement, CallableStatement и PreparedStatement определяют методы и свойства, которые позволяют отправлять команды SQL или PL / SQL и получать данные из вашей базы данных.

Интерфейсы

Рекомендуемое использование

Statement

executeQuery


Для селектов

executeUpdate


(DML - Data Manipulation Language)

(DDL - Data Definition Language).


Statement statement = conn.createStatement();
Используется для общего доступа к БД. Полезно, когда вы используете статические операторы SQL во время выполнения. Интерфейс оператора не может принимать параметры. Т.е статичен Оператор используется для статических запросов, таких как DDL, т.е. create, drop, alte

В Statement запрос предварительно не компилируется

Например, если вы хотите создать таблицу и вставить элемент, тогда :: Создайте таблицу (статическую) с помощью statement и Вставьте элемент (динамический) с помощью prepareStatement.

Statement предназначен для выполнения простых SQL-запросов без параметров; содержит базовые методы для выполнения запросов и извлечения результатов.


Prepared Statement

Наследует Statement

Хорошо против Sql-injection, предварительно компилирует запросы, которые могут содержать входные параметры обозначенные символом '?'

Используйте это, когда вы планируете использовать операторы SQL много раз. Интерфейс PreparedStatement принимает входные параметры во время выполнения.

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

prepareStatement используется для динамических запросов, например, запросов DML

в то время как в prepareStatement запрос предварительно компилируется, потому что этот prepareStatement является эффективным по времени.

prepareStatement принимает аргументы во время создания

CallableStatement

Наследует Prepared Statement

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

CallableStatement cstmt = con.prepareCall("{call setGoodsData(?, ?)}");