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

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

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

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

Добавлен: 04.05.2024

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

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

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

1. Что такое Maven? Для чего он нужен? Как добавлять в проект
библиотеки без него?
Фреймворк для автоматизации сборки проектов на основе описания их структуры в файлах на языке POM(Project Object Model), являющемся подмножеством XML. Проект Maven издаётся сообществом Apache
Software Foundation, где формально является частью Jakarta- Project.
Фреймворк (Это каркас программной системы (или подсистемы).
Может включать: вспомогательные программы, библиотеки кода, язык сценариев и другое ПО, облегчающее разработку и объединение разных компонентов большого программного проекта. Обычно объединение происходит за счёт использования единого API.) для автоматизации сборки проектов, специфицированных на XML-языке
POM(Project Object Model).
Главное преимущество Maven — это управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек. Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Maven позволяет управлять такими сложными зависимостями, что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
Добавить самому - project settings - Libraries download jar - Class path
2. Как добавить dependency в Maven? Для чего они нужны? Откуда
они скачиваются?
Как правило, большинство популярных библиотек находятся в центральном репозитории, поэтому их можно прописывать сразу в раздел dependencies вашего pom-файла Вся структура проекта описывается в файле pom.xml (POM – Project Object Model)
Используемые в проекте библиотеки необходимо включить в сборку.
Для решения данной задачи в maven-проекте необходимо использовать зависимость dependency, устанавливаемые в файле pom.xml, где для каждого используемого в проекте артефакта необходимо указать :

● параметры GAV (groupId, artifactId, version) и, в отдельных случаях,
«необязательный» классификатор classifier;
● области действия зависимостей scope (compile, provided, runtime, test,
system, import);
● месторасположение зависимости (для области действия зависимости system).
Области видимости (scope) зависимостей (dependency) в maven.
Может быть указана в секкции dependency файла pom.xml.
compile - область видимости по умолчанию. Используется, когда область видимости явно не указана. Компилирует зависимости,
доступные во всех classpath проекта.
provided - эта область видимости очень похожа на compile, но показывает, что JDK или среда исполнения должна предоставить эти зависимости во время выполнения.
runtime - показывает, что зависимость не нужна для компиляции, но нужна во время выполнения.
test - показывает, что эти зависимости не нужны для работы приложения и используются только в фазе тестирования.
system - очень похожа на provided за исключением того, что вы предоставите архив, который содержит эту зависимость. Артефакт всегда доступен, поэтому его поиск в репозитории не производится.
import (Maven версии 2.0.9 или выше) - эта область видимости используется только в зависимости типа pom в секции
. Она показывает, что указанный pom должен быть заменён зависимостями из pom'a, который указан в dependencyManagement.
Параметры GAV
● groupId - идентификатор производителя объекта. Часто используется схема принятая в обозначении пакетов Java. Например, если производитель имеет домен domain.com, то в качестве значения groupId
удобно использовать значение com.domain. То есть, groupId это по сути имя пакета.


● artifactId - идентификатор объекта. Обычно это имя создаваемого модуля или приложения.
● version - версия описываемого объекта. Для незавершенных проектов принято добавлять суффикс SNAPSHOT. Например 1.0.0-SNAPSHOT.
Значения идентификаторов groupId и artifactId подключаемых библиотек практически всегда можно найти на сайте www.mvnrepository.com. Или аналоги других производителей типа
Commons IO – Dependency Information (apache.org). Виды
Maven-репозиториев
Стоит еще раз упомянуть Мавен-репозиторий, потому что их на самом деле у нас два — внешний (глобальный) и локальный, у тебя на компьютере. Все библиотеки, которые ты добавляешь в свои проекты,
сохраняются в локальном репозитории. Когда Maven добавляет необходимую зависимость в проект, он сначала проверяет локальный репозиторий на наличие такой библиотеки, и только если не находит ее там — обращается к внешнему.
3. Основные фазы проекта под управлением Maven?
Процесс построения приложения называют жизненным циклом
Maven-проекта, и состоит он из фаз (phase). Посмотреть на них можно в IDEA, нажав на Maven>example>Lifecycle в правом верхнем углу:
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)
6. Что такое Statement, PreparedStatement, CallableStatement?
Интерфейсы JDBC Statement, CallableStatement и PreparedStatement определяют методы и свойства, которые позволяют отправлять команды SQL или PL / SQL и получать данные из вашей базы данных.
Statement предназначен для выполнения простых SQL-запросов без параметров;
содержит базовые методы для выполнения запросов и извлечения результатов.
PreparedStatement используется для выполнения SQL-запросов с или без входных параметров; добавляет методы управления входными параметрами.
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.

Prepared
Statement
Наследует
Statement
Хорошо против Sql-injection, предварительно компилирует запросы, которые могут содержать входные параметры обозначенные символом '?'
Используйте это, когда вы планируете использовать операторы SQL много раз. Интерфейс PreparedStatement принимает входные параметры во время выполнения.
Кроме собственно выполнения запроса этот класс позволяет подготовить запрос, отформатировать его должным образом. Динамичен, быстрее.
prepareStatement используется для динамических запросов, например, запросов DML
в то время как в prepareStatement запрос предварительно компилируется, потому что этот prepareStatement является эффективным по времени.
prepareStatement принимает аргументы во время создания
CallableStateme nt
Наследует
Prepared
Statement
Используйте это, когда вы хотите получить доступ к хранимым процедурам базы данных (объект базы данных,
представляющий собой набор SQL-инструкций, который компилируется один раз и хранится на сервере).
Интерфейс CallableStatement также может принимать входные параметры времени выполнения.
CallableStatement cstmt = con.prepareCall("{call setGoodsData(?, ?)}");
Некоторые из преимуществ PreparedStatement по сравнению с Statement:
1. PreparedStatement помогает нам предотвратить атаки с использованием
SQL-инъекций, поскольку он автоматически экранирует специальные символы.

2. PreparedStatement позволяет нам выполнять динамические запросы с вводом параметров.
3. PreparedStatement предоставляет различные типы методов установки для установки входных параметров запроса.
4. PreparedStatement быстрее, чем Statement. Это становится более заметным, когда мы повторно используем PreparedStatement или используем его методы пакетной обработки для выполнения нескольких запросов.
5. PreparedStatement помогает нам писать объектно-ориентированный код с помощью методов установки, тогда как с Statement мы должны использовать конкатенацию строк для создания запроса. Если необходимо установить несколько параметров, написание запроса с использованием конкатенации строк выглядит очень некрасиво и подвержено ошибкам.
Хранимые процедуры позволяют повысить производительность, расширяют возможности программирования и поддерживают функции безопасности данных.
Вместо хранения часто используемого запроса, клиенты могут ссылаться на соответствующую хранимую процедуру. При вызове хранимой процедуры её
содержимое сразу же обрабатывается сервером.
Кроме собственно выполнения запроса, хранимые процедуры позволяют также производить вычисления и манипуляцию данными — изменение,
удаление, выполнять DDL-операторы (не во всех СУБД!) и вызывать другие хранимые процедуры, выполнять сложную транзакционную логику.
Один-единственный оператор позволяет вызвать сложный сценарий, который содержится в хранимой процедуре, что позволяет избежать пересылки через сеть сотен команд и, в особенности, необходимости передачи больших объёмов данных с клиента на сервер.
7. Что такое sql-injection?
SQL инъекция — это один из самых доступных способов взлома сайта.
Внедрение SQL, в зависимости от типа используемой СУБД и условий внедрения
, может дать возможность атакующему выполнить произвольный запрос к базе данных (например, прочитать содержимое любых таблиц,


удалить, изменить или добавить данные), получить возможность чтения и/или записи локальных файлов и выполнения произвольных команд на атакуемом сервере.
Атака типа внедрения SQL может быть возможна из-за некорректной обработки входных данных, используемых в SQL-запросах.
Суть таких инъекций – внедрение в данные (передаваемые через GET, POST
запросы или значения Cookie) произвольного SQL кода. Если сайт уязвим и выполняет такие инъекции, то по сути есть возможность творить с БД (чаще всего это MySQL) что угодно.
Проверять нужно всё – числа, строки, даты, данные в специальных форматах.
Числа
Для проверки переменной на числовое значение используется функция is_numeric(n); , которая вернёт true, если параметр n — число, и false в противном случае.
Строки
Большинство взломов через SQL происходят по причине нахождения в строках «необезвреженных» кавычек, апострофов и других специальных символов. Для такого обезвреживания нужно использовать функцию addslashes($str);, которая возвращает строку $str с добавленным обратным слешем (\) перед каждым специальным символом. Данный процесс называется экранизацией.
8. Что такое ResultSet? Как с ним работать?
ResultSet result = statement.executeQuery("select * from people");
while(result.next())
Интерфейс Java JDBC ResultSet представляет результат запроса к базе данных. Текст о запросах показывает, как результат запроса возвращается как java.sql.ResultSet. Обеспечивает приложению построчный доступ к результатам запросов. При обработке запроса ResultSet поддерживает указатель на текущую обрабатываемую строку.

Доступ к данным ResultSet обеспечивает посредством набора get-методов,
которые организуют доступ к колонкам текущей строки. Метод ResultSet.next используется для перемещения к следующей строке ResultSet, делая ее текущей.
Метод
Описание public boolean absolute(int row)
throws
SQLException
Метод перемещает курсор на заданное число строк от начала, если число положительно, и от конца - если отрицательно public void afterLast() throws
SQLException
Этот метод перемещает курсор в конец результирующего набора за последнюю строку public void beforeFirst()
throws
SQLException
Этот метод перемещает курсор в начало результирующего набора перед первой строкой public void deleteRow()
throws
SQLException
Удаляет текущую строку из результирующего набора и базы данных public
ResultSetMetaDa ta getMetaData()
throws
SQLException
Предоставляет объект метаданных для данного ResultSet.
Класс ResultSetMetaData содержит информацию о результирующие таблице, такую как количество столбцов, их заголовок и т.д.
public int getRow() throws
Возвращает номер текущей строки