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

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

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

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

Добавлен: 30.11.2023

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

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

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


Оглавление


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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



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

Maven использует файл конфигурации, называемый "pom.xml", который содержит информацию о проекте, его зависимостях, сборке и тестировании. При запуске сборки Maven проверяет зависимости проекта, загружает их из удаленных репозиториев и устанавливает их в проект. Затем Maven выполняет задачи, определенные в файле pom.xml, такие как компиляция кода, сборка и упаковка приложения в соответствии с определенными требованиями.

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

Чтобы добавить библиотеку в проект Maven, нужно указать ее зависимость в файле pom.xml и указать соответствующий координат (название группы, артефакт и версию). При сборке проекта Maven автоматически загрузит и установит библиотеку в проект.


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




Для добавления зависимости в Maven нужно отредактировать файл pom.xml в корневой директории проекта и добавить элемент dependency в блоке dependencies.
Элемент dependency содержит информацию о библиотеке, включая groupId, artifactId и version.
Зависимости нужны для того, чтобы проект мог использовать код и функциональность из внешних библиотек, которые необходимы для работы проекта. Maven автоматически скачивает зависимости из центрального репозитория Maven (Maven Central Repository) или других настроенных репозиториев и устанавливает их в локальный репозиторий на вашем компьютере.
Если не использовать Maven, то библиотеки можно скачать вручную с сайта разработчика или с других источников, затем добавить их в проект вручную и указать путь к ним в настройках среды разработки. Однако это более трудоемкий и менее удобный способ, особенно при работе с большими проектами и множеством зависимостей.


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



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

validate - проверка корректности проекта перед сборкой.

compile - компиляция исходных кодов проекта в байт-код Java.

test - выполнение тестов для проверки правильности работы кода.

package - упаковка скомпилированных классов и других ресурсов проекта в jar, war или другой формат, в зависимости от типа проекта.

verify - проверка корректности упаковки, например, проверка подписей jar-файлов.

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

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

Кроме того, существуют также фазы, связанные с документацией, репортингом и другими аспектами сборки проекта.

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


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



JDBC (Java Database Connectivity) - это стандартный интерфейс для взаимодействия Java-приложений с реляционными базами данных. JDBC позволяет программистам использовать Java-код для работы с данными в базах данных с помощью SQL.



Основными классами и интерфейсами JDBC являются:

DriverManager: класс, который загружает драйвер JDBC и управляет соединением с базой данных.

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

Statement: интерфейс, который позволяет отправить SQL-запрос к базе данных. Этот интерфейс также используется для выполнения хранимых процедур.

PreparedStatement: интерфейс, который представляет параметризованный запрос SQL. Он позволяет заменить значения параметров в запросе перед выполнением.

ResultSet: интерфейс, который представляет результаты SQL-запроса. ResultSet используется для получения данных из базы данных после выполнения запроса.

SQLException: класс, который представляет ошибки, возникающие при работе с базой данных.


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



DriverManager - это класс из стандартной библиотеки Java, который управляет регистрацией и выбором драйвера JDBC, а также установлением соединения с базой данных.

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

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

Использование DriverManager позволяет разработчикам писать переносимый код, который может работать с разными базами данных, используя стандартный интерфейс JDBC, без необходимости знать детали подключения к каждой конкретной базе данных.

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



Statement, PreparedStatement и CallableStatement - это три основных интерфейса JDBC, которые используются для выполнения запросов к базе данных и обработки результатов. Вот их краткое описание:

Statement: Этот интерфейс позволяет отправить SQL-запрос к базе данных. Он используется для выполнения статических запросов, которые не содержат параметров. Statement может быть использован для выполнения любого SQL-запроса, включая SELECT, INSERT, UPDATE и DELETE.


PreparedStatement: Этот интерфейс наследует функциональность Statement, но позволяет создавать параметризованные запросы, где значения параметров могут быть заданы динамически во время выполнения запроса. Это повышает безопасность запросов и производительность, так как запрос может быть скомпилирован только один раз, а не каждый раз, когда он выполняется.

CallableStatement: Этот интерфейс расширяет PreparedStatement и предназначен для выполнения хранимых процедур базы данных. Хранимая процедура - это блок кода, который выполняется в базе данных, который может принимать параметры и возвращать значения. CallableStatement позволяет вызывать такие процедуры и получать результаты их выполнения.

В целом, использование PreparedStatement и CallableStatement является предпочтительным способом выполнения запросов к базе данных, так как это более безопасно и эффективно, чем использование простых Statement. Однако, если запросы статические или если количество запросов небольшое, то Statement также может использоваться.


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



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

Например, атакующий может ввести в поле ввода следующий код:

' OR 1=1 –
Это добавит в SQL-запрос условие, которое всегда истинно (1=1), и тем самым обойдет проверку наличия пользователя в базе данных. Два дефиса (--) указывают на то, что остаток строки является комментарием и должен быть проигнорирован.
Кроме того, атакующий может использовать SQL-инъекцию для получения доступа к конфиденциальным данным, например, с помощью следующего кода:

' UNION SELECT username, password FROM users –
Это добавит в SQL-запрос команду объединения таблиц (UNION SELECT), которая вернет данные из таблицы пользователей, включая их имена и пароли.
Для защиты от SQL-инъекций следует использовать параметризованные запросы (PreparedStatement), а также валидацию и санитаризацию пользовательского ввода данных. Также не следует отображать подробную информацию об ошибках, возникших при выполнении SQL-запросов, так как это может помочь атакующим получить информацию о структуре базы данных и используемых таблицах.


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



ResultSet - это объект в Java, который представляет результат выполнения запроса SELECT к базе данных через JDBC. Он содержит набор строк данных, соответствующих запросу, и позволяет программисту манипулировать этими данными.

Чтобы получить ResultSet из базы данных, необходимо выполнить запрос SELECT, используя объект Statement, PreparedStatement или CallableStatement. Затем, после выполнения запроса, результат можно получить вызовом метода executeQuery() на соответствующем объекте Statement. Метод executeQuery() возвращает ResultSet, который содержит результаты запроса.
try {

// создаем подключение к базе данных

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");



// создаем Statement для выполнения запросов

Statement stmt = conn.createStatement();



// выполняем запрос SELECT и получаем ResultSet

ResultSet rs = stmt.executeQuery("SELECT * FROM users");



// перебираем строки ResultSet и выводим значения столбцов на консоль

while (rs.next()) {

int id = rs.getInt("id");

String name = rs.getString("name");

int age = rs.getInt("age");

System.out.println(id + ", " + name + ", " + age);

}



// закрываем ResultSet, Statement и соединение с базой данных

rs.close();

stmt.close();

conn.close();

} catch (SQLException ex) {

// обрабатываем исключения при работе с базой данных

ex.printStackTrace();

}
В этом примере мы создаем подключение к базе данных, создаем Statement для выполнения запросов, выполняем запрос SELECT и получаем ResultSet. Затем мы перебираем строки ResultSet и выводим значения столбцов на консоль. В конце мы закрываем ResultSet, Statement и соединение с базой данных. Если происходит исключение при работе с базой данных, мы его обрабатываем и выводим трассировку стека на консоль.


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



DAO (Data Access Object) - это паттерн проектирования, который используется для абстрагирования приложения от деталей доступа к базе данных. Он представляет собой класс или интерфейс, который предоставляет общий интерфейс для доступа к данным в базе данных. Он определяет методы для создания, чтения, обновления и удаления данных в базе данных.

DAO позволяет разделить логику доступа к данным и логику бизнес-логики приложения. Благодаря этому, при изменении структуры базы данных или способа доступа к данным, не нужно менять бизнес-логику приложения. Это упрощает сопровождение и разработку приложения.