ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.04.2024
Просмотров: 13
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
-
Жизненный цикл проекта Maven.
Жизненный цикл проекта — это список поименованных фаз построения проекта.
1. arhetype
Создание шаблона проекта, скачивание и подключение зависимостей.
2. compile
Компиляция проекта
3. test
Тестирование проекта
4. package
Создание jar или war файлов
5. install
Инсталляция в удаленном Maven-репозитории. Теперь проект доступен как модуль для других локальных проектов.
6. deploy
Инсталляция в удаленном Maven-репозитории (теперь стабильная версия проекта доступна широкому кругу разработчиков).
Maven имеет также стандартный жизненный цикл для чистки (cleaning) и для генерации его страницы (site). Если бы 'clean' было частью обычного жизненного цикла, проект подвергался бы чистке при каждом построении, что нежелательно.
Стандартные жизненные циклы могут быть существенно дополнены Maven-плагинами и Maven-архетипами.
-
Что такое Maven? Для чего он нужен? Как добавлять в проект библиотеки без него?
Apache Maven - это фреймворк для автоматизации сборки проекта на основе описания их структуры в файлах на языке POM (это подмножество языка XML)
Добавление библиотек без Maven
Если на компьютере только одна версия Джавы — всё просто. Чтобы подключить .jar, достаточно положить его в папку lib директории Java на жестком диске. Виртуальная машина при ближайшем запуске сама возьмет код из библиотеки.
Когда вы используете одновременно несколько версий Java-машины, раскладывать файлы библиотек для каждой из них утомительно. Лучше указать путь к нужным классам с помощью ключа -classpath.
Открываем терминал и пишем:
java -classpath ./classes ru.аuthor.libname.Main
ru.аuthor.libname.Main — наша библиотека
-
Как добавить dependency в Maven? Для чего они нужны? Откуда они скачиваются?
Для подключения зависимости в maven используется тег dependency. Теги dependency должны находиться внутри тега dependencies. В Maven библиотека является артефактом, а значит имеет groupId, artifactId и version. Чтобы подключить библиотеку к проекту с помощью maven достаточно указать её groupId, artifactId и version.
Dependency – это зависимости от библиотек, а если точней, то это и есть библиотека, которую вы бы хотели подключить к проекту.
Скачиваются зависимости из удаленного репозитория
-
Основные фазы проекта под управлением Maven?
1.compile - компилирование проекта;
2. test - тестирование с помощью JUnit тестов;
3. package - создание jar файла или war, ear в зависимости от типа проекта;
4. integration-test - запуск интеграционных тестов;
5. install - копирование jar (war, ear) в локальный репозиторий;
6. deploy - публикация файла в удалённый репозиторий.
-
Что такое JDBC? Какие классы/интерфейсы относятся к JDBC?
JDBC — платформенно независимый промышленный стандарт взаимодействия Java-приложений с различными СУБД, реализованный в виде пакета java.sql, входящего в состав Java SE. JDBC основан на концепции так называемых драйверов, позволяющих получать соединение с базой данных по специально описанному URL.
java.sql.DriverManager - позволяет загрузить и зарегистрировать необходимый JDBC-драйвер, а затем получить соединение с базой данных.
javax.sql.DataSource - решает те же задачи, что и DriverManager, но более удобным и универсальным образом. Существуют также javax.sql.ConnectionPoolDataSource и
javax.sq1.XADataSource задача которых - обеспечение поддержки пула соединений.
java.sql.Connection - обеспечивает формирование запросов к источнику данных и управление транзакциями.
Также предусмотрены интерфейсы
javax.sql.PooledConnection и javax.sql.XAConnection.
java.sql.Statement , java.sql.PreparedStatement и java.sql.CallableStatement - эти интерфейсы позволяют отправить запрос к источнику данных.
java.sql.ResultSet - объявляет методы, которые позволяют перемещаться по набору данных и считывать значения отдельных полей в текущей записи.
java.sql.ResultSetMetaData - позволяет получить информацию о структуре набора данных.
java.sql.DatabaseMetaData - позволяет получить информацию о структуре источника данных.
-
Для чего нужен DriverManager?
Класс DriverManager является уровнем управления JDBC, отслеживает все доступные драйверы и управляет установлением соединений между БД и соответствующим драйвером. Прежде чем подключаться к серверу БД необходимо определиться с соответствующим драйвером JDBC, который представляет собой *. jar файл.
-
Что такое Statement, PreparedStatement, CallableStatement?
Как только соединение установлено, мы можем взаимодействовать с базой данных. Интерфейсы JDBC Statement, CallableStatement и PreparedStatement определяют методы и свойства, которые позволяют отправлять команды SQL или PL / SQL и получать данные из вашей базы данных.
Statement - Используйте это для общего доступа к вашей базе данных. Полезно, когда вы используете статические операторы SQL во время выполнения. Интерфейс оператора не может принимать параметры.
PreparedStatement - Используйте это, когда вы планируете использовать операторы SQL много раз. Интерфейс PreparedStatement принимает входные параметры во время выполнения.
CallableStatement - Используйте это, когда вы хотите получить доступ к хранимым процедурам базы данных. Интерфейс CallableStatement также может принимать входные параметры времени выполнения.
-
Что такое sql-injection?
SQL-инъекция или SQLi – уязвимость, которая позволяет атакующему использовать фрагмент вредоносного кода на языке структурированных запросов (SQL) для манипулирования базой данных и получения доступа к потенциально ценной информации.
-
Что такое ResultSet? Как с ним работать?
Интерфейс ResultSet определяет методы, которые позволяют работать с данными, полученными в результате выполнения запроса в базу данных. Результаты запроса помещаются в объект типа ResultSet и являются логическим представлением строк и столбцов данных, хранящихся в базе.
Существует три варианта объектов типа ResultSet: Standard, Scrollable и Updateable. При использовании стандартного варианта обновление полученного результата запроса невозможно, а перемещение по строкам результата запроса возможно только в одном направлении: от первой к последней записи. Вариант Scrollable позволяет перемещаться по строкам запроса как в прямом, так и в обратном направлении, а также позиционировать курсор как на абсолютную, так и на относительную текущей позицию. Вариант Updateable позволяет изменять данные результата запроса, вставлять и удалять строки. Оба последних варианта будут выполняться более медленно, чем стандартный вариант использования объекта типа ResultSet. По этому их лучше использовать только в необходимых для этого случаях.
При работе со стандартным вариантом использования объектов типа ResultSet используются следующие методы:
next() - перемещает курсор на следующую строку результата запроса;
isBeforeFirst() - Возвращает true если курсор находится на позиции “до первой записи” (BFR);
isFirst() - Возвращает true если курсор указывает на первую запись;
isAfterLast() - Возвращает true если курсор находится на позиции “после последней записи” (ALR);
isLast() - Возвращает true если курсор указывает на последнюю запись;
getRow() - Возвращает integer значение номера строки в результате запроса. 1 – первая строка; 2 – вторая строка и т.д. Метод возвращает 0 если строк не существует либо курсор находится в позиции BFR либо ALR.
Два других варианта использования объектов типа ResultSet требуют указания дополнительных параметров методам createStatement(), prepareStatement() и prepareCall():
createStatement(int resultSetType, int resultSetConcurrency);
prepareStatement(String sql, int resultSetType, int resultSetConcurrency);
prepareCall(String sql, int resultSetType, int resultSetConcurrency).
Первый параметр resultSetType используется для создания Scrollable ResultSet. Он задает возможность перемещения курсора в разных направления по строкам результата запроса и определяет чувствительность к изменениям данных, которые были изменены в базе после выполнения запроса. Параметр resultSetType может принимать следующие интуитивно понятные значения:
TYPE_SCROLL_INSENSITIVE – предусматривает перемещение курсора в любых направлениях, допускает абсолютное и относительное позиционирование курсора. Не отражает изменений данных, сделанных в базе после выполнения запроса.
TYPE_SCROLL_SENSITIVE - предусматривает перемещение курсора в любых направлениях, допускает абсолютное и относительное позиционирование курсора. Отражает изменения данных, сделанных в базе после выполнения запроса.
TYPE_FORWARD_ONLY – параметр по умолчанию, стандартный ResultSet.
Второй параметр resultSetConcurrency отвечает за возможность изменения данных результата запроса, вставки и удаления строк из базы данных. Он может принимать одно из двух значений:
CONCUR_UPDATABLE – позволяет вносить изменения в данные;
CONCUR_READ_ONLY – параметр по умолчанию, стандартный ResultSet.
При работе со Scrollable и Updateable вариантами объектов типа ResultSet используются следующие методы:
next() - перемещает курсор на следующую строку результата запроса;
previous() - перемещает курсор на предыдущую строку результата запроса;
beforeFirst() - устанавливает курсор на позицию “до первой строки”; если сразу после выполнения этого метода выполнить метод getXXX() будет выдано исключение типа SQLException;
afterLast() - устанавливает курсор на позицию “после последней строки”; если сразу после выполнения этого метода выполнить метод getXXX() будет выдано исключение типа SQLException;
first() - устанавливает курсор на первую строку результата запроса;
last() - устанавливает курсор на последнюю строку результата запроса;
absolute() - устанавливает курсор на указанную строку относительно первой строки результата запроса;
relative() - устанавливает курсор на указанную строку относительно текущей строки;
moveToCurrentRow() - устанавливает курсор на строку, номер которой был запомнен в результате выполнения метода moveToInsertRow();
moveToInsertRow() - устанавливает курсор в специальную свободную позицию для заполнения пустой строки значениями с помощью методов updateXXX() и последующей вставки этой строки в базу данных с помощью метода insertRow();
deleteRow() - удаляет строку как из результата запроса, так и из базы данных.
-
Рассказать про паттерн DAO.
При проектировании информационной системы выявляются некоторые слои, которые отвечают за взаимодействие различных модулей системы. Соединение с базой данных является одной из важнейшей составляющей приложения. Всегда выделяется часть кода, модуль, отвечающающий за передачу запросов в БД и обработку полученных от неё ответов. В общем случае, определение Data Access Object описывает его как прослойку между БД и системой. DAO абстрагирует сущности системы и делает их отображение на БД, определяет общие методы использования соединения, его получение, закрытие и (или) возвращение в Connection Pool.
Вершиной иерархии DAO является абстрактный класс или интерфейс с описанием общих методов, которые будут использоваться при взаимодействии с базой данных. Как правило, это методы поиска, удаление по ключу, обновление и т.д.
Реализация DAO на уровне класса подразумевает использование одного единственного коннекта для вызова более чем одного метода унаследованного DAO класса. В этом случае, в вершине иерархии DAO AbstractController, в качестве поля объявляется connection.
-
Что такое JPA?
JPA (Java Persistence API) это спецификация Java EE и Java SE, описывающая систему управления сохранением java объектов в таблицы реляционных баз данных в удобном виде. Сама Java не содержит реализации JPA, однако есть существует много реализаций данной спецификации от разных компаний (открытых и нет). Это не единственный способ сохранения java объектов в базы данных (ORM систем), но один из самых популярных в Java мире.
Например JPA описывает, а Hibernate реализует.
-
Что такое ORM?
ORM — Object-Relational Mapping или в переводе на русский объектно-реляционное отображение. Это технология программирования, которая связывает базы данных с концепциями объектно-ориентированных языков программирования. Если упростить, то ORM это связь Java объектов и записей в БД.