2. Java Data Base Connectivity (JDBC), Maven Flashcards

1
Q

Что такое jdbc? Как он связан с полиморфизмом?

A

Java Database Connectivity – это стандартный API для независимого соединения языка программирования Java с различными базами данных (далее – БД).

JDBC решает следующие задачи:

Создание соединения с БД.
Создание SQL выражений.
Выполнение SQL – запросов.
Просмотр и модификация полученных записей.
Если говорить в целом, то JDBC – это библиотека, которая обеспечивает целый набор интерфейсов для доступа к различным БД.

Для доступа к каждой конкретной БД необходим специальный JDBC – драйвер, который является адаптером Java – приложения к БД.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Что такое Driver?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что такое Connection?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что такое Statement? какие еще есть варианты?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что такое PreparedStatement?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Что такое ResultSet?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Для чего нужен Maven?

A

Системы сборки проектов
Мавен - это инструмент для сборки Java проекта: компиляции, создания jar, создания дистрибутива программы, генерации документации. Простые проекты можно собрать в командной строке. Если собирать большие проекты с командной строки, то команда для сборки будет очень длинной, поэтому её иногда записывают в bat/sh скрипт. Но такие скрипты зависят от платформы. Для того чтобы избавиться от этой зависимости и упростить написание скрипта используют инструменты для сборки проекта.

Для платформы Java существуют два основных инструмента для сборки: Ant и Maven.

Основные преимущества Maven
- Независимость от OS. Сборка проекта происходит в любой операционной системе. Файл проекта один и тот же.
- Управление зависимостями. Редко какие проекты пишутся без использования сторонних библиотек(зависимостей). Эти сторонние библиотеки зачастую тоже в свою очередь используют библиотеки разных версий. Мавен позволяет управлять такими сложными зависимостями. Что позволяет разрешать конфликты версий и в случае необходимости легко переходить на новые версии библиотек.
- Возможна сборка из командной строки. Такое часто необходимо для автоматической сборки проекта на сервере (Continuous Integration).
- Хорошая интеграция со средами разработки. Основные среды разработки на java легко открывают проекты которые собираются c помощью maven. При этом зачастую проект настраивать не нужно - он сразу готов к дальнейшей разработке.
Как следствие - если с проектом работают в разных средах разработки, то maven удобный способ хранения настроек. Настроечный файл среды разработки и для сборки один и тот же - меньше дублирования данных и соответственно ошибок.
- Декларативное описание проекта.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как можно работать с зависимостями в Maven?

A

Apache Maven — отличная штука, для управления сторонними зависимостями в вашем проекте. Достаточно сказать ему, какой артефакт вам нужен и всё остальное Maven сделает сам.

Добавление зависимостей
Все зависимости перечисляются в секции , одна за одной, в любом порядке.

  junit                                                                                                
  junit                                                                                          
  3.8.2                                                                                                
  test                                                                                                     

Например, в архетипе quickstart автоматически добавляется библиотека JUnit3. Если мы хотим перейти с JUnit3 на JUnit4, то достаточно изменить версию в зависимости:

  junit                                                                                                
  junit                                                                                          
  4.12                                                                                                
  test                                                                                                     

Чтобы добавить какую-нибудь другую зависимость, например TestNG, надо знать её maven координаты, то есть группу, артефакт и версию:

<code></code>

  junit                                                                                                
  junit                                                                                          
  4.12                                                                                                 
  test                                                                                                     

<b>                                                                                                             

  org.testng                                                                                           
  testng                                                                                         
  6.11                                                                                                
  test                                                                                                     

</b>

</code>

Переменные в maven
Перед тем как продолжить добавлять зависимости, нужно сделать шаг к переменным в maven. Maven позволяет задавать переменные (а сам задаёт ещё больше), значения которых впоследствии можно использовать где угодно:

1.2.3

${myvar}
И в тег будет подставлено значение «1.2.3».

Те же самые переменные можно и нужно использовать, чтобы задавать версию зависимости отдельно от самой зависимости.

Области видимости
Вы могли заметить, что описания зависимостей для JUnit и Spring framework отличаются параметром scope, он же — область видимости. Scope позволяет указать maven’у когда и для чего вам нужна эта зависимость. Всего существует шесть областей видимости:

compile — область видимости по умолчанию. Зависимости с этим scope будут доступны и во время сборки и во время тестирования и их даже добавят в конечный пакет, чтобы они были доступны и во время исполнения. Более того, maven распространит их дальше и сделает доступными в зависимых пакетах.
provided — Почти как compile, но в пакет зависимость добавлена не будет. Предполагается что данные библиотеки будут предоставлены средой выполнения, например J2EE контейнером. Каноничный пример такой зависимости — J2EE API, конкретная реализация которых предоставляется контейнером J2EE.
runtime — антипод provided. Означает зависимость, которая требуется для исполнения/тестирования кода, но не для его сборки. Зависимости из этого
scope так же будут добавлены в пакет.
test — зависимости, которые нужны только и исключительно для тестов. Как JUnit из примера выше.
system — зависимость которая присутствует в среде Java всегда, тем или иным путём. Maven не будет пытаться предоставить этот артефакт или класть
его в пакет итд.
import — использутся для импорта зависимостей из других артефактов и управлением зависимостями в сложных пакетах, состоящих из нескольких артефактов.

        org.projectlombok
        lombok
        ${lombok.annotations}
        provided

        org.slf4j
        slf4j-api
        ${slf4j.version}

        org.slf4j
        slf4j-log4j12
        ${slf4j.version}
        runtime

        junit
        junit
        ${junit.version}
        test
  • org.projectlombok:lombok — утилита для генерации кода, работающая только во время компиляции. Поэтому у неё scope — provided
  • org.slf4j:slf4j-api — Фронтенд для ведения логов. Мой проект с ним собирается, тестируется и работает. Scope Slf4j — compile.
  • org.slf4j:slf4j-log4j12 — Реализация Slf4j поверх log4j. Мой проект не ссылается напрямую на эту библиотеку и использует её только посредством Slf4j, поэтому её Scope — runtime.
  • junit:junit — Фреймворк юнит-тестирования. Очевидно что он нужен только во время исполнения тестов и из-за этого его scope — test.

Чтобы просмотреть, какие именно зависимости (с учётом их зависимостей) имеет ваш артефакт, можно попросить maven нарисовать дерево зависимостей:
$ mvn dependency:tree
[INFO] Scanning for projects…
[INFO] Searching repository for plugin with prefix: ‘dependency’.
[INFO] ————————————————————————
[INFO] Building exclude
[INFO] task-segment: [dependency:tree]
[INFO] ————————————————————————
[INFO] [dependency:tree {execution: default-cli}]
[INFO] ru.morningjava.maven:exclude:jar:1.0
[INFO] +- junit:junit:jar:4.10:test
[INFO] | - org.hamcrest:hamcrest-core:jar:1.1:test

Или тоже самое, но с подробностями:
$ mvn dependency:tree -Dverbose=true

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Какие цели есть в Maven? Чем отличается deploy от install?

A

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

Порядок выполнения зависит от порядка вызова целей и фаз.

Задача clean Maven (clean:clean) привязывается к фазе clean в жизненном цикле сборки. Эта задача удаляет ввод сборки путём удаления директории сборки. Таким образом, когда выполняется команда mvn clean, Maven удаляет директорию сборки (target)

package Преобразует скомпилированный код и пакет в дистрибутивный формат. Такие как JAR, WAR или EAR.

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

deploy Копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам.

Жизненный цикл Default (Build)

Это основной жизненный цикл Maven, который используется для сборки проектов. Он включает в себя 23 фазы:

validate Подтверждает, является ли проект корректным и вся ли необходимая информация доступа для завершения процесса сборки.
initialize Инициализирует состояние сборки, например, различные настройки.
generate-sources Включает любой исходный код в фазу компиляции.
process-sources Обрабатывает исходный код (подготавливает). Например, фильтрует определённые значения.
generate-resources Генерирует ресурсы, которые должны быть включены в пакет.
process-resources Копирует и отправляет ресурсы в указанную директорию. Это фаза перед упаковкой.
compile Комплирует исходный код проекта.
process-classes Обработка файлов, полученных в результате компиляции. Например, оптимизация байт-кода Java классов.
generate-test-sources Генерирует любые тестовые ресурсы, которые должны быть включены в фазу компиляции.
process-test-sources Обрабатывает исходный код тестов. Например, фильтрует значения.
test-compile Компилирует исходный код тестов в указанную директорию тестов.
process-test-classes Обрабатывает файлы, полученные в результате компиляции исходного кода тестов.
test Запускает тесты, используя приемлемый фреймворк юнит-тестирования (например, Junit).
prepare-package Выполняет все необходимые операции для подготовки пакет, непосредственно перед упаковкой.
package Преобразует скомпилированный код и пакет в дистрибутивный формат. Такие как JAR, WAR или EAR.
pre-integration-test Выполняет необходимые действия перед выполнением интеграционных тестов.
integration-test Обрабатывает и распаковывает пакет, если необходимо, в среду, где будут выполняться интеграционные тесты.
post-integration-test Выполняет действия, необходимые после выполнения интеграционных тестов. Например, освобождение ресурсов.
verify Выполняет любые проверки для подтверждения того, что пакет пригоден и отвечает критериям качества.
install Устанавливает пакет в локальный репозиторий, который может быть использован как зависимость в других локальных проектах.
deploy Копирует финальный пакет (архив) в удалённый репозиторий для, того, чтобы сделать его доступным другим разработчикам и проектам.
Необходимо уточнить два момента:

Когда мы выполняем команду Maven, например install, то будут выполнены фазы до install и фаза install.
Различные задачи Maven будут привязаны к различным фазам жизненного цикла Maven в зависимости от типа архива (JAR/WAR/EAR).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Чем CallableStatement отличается?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Можно ли прописывать Native Query в Callable?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Что такое мавен? Полное имя артефакта?

A
How well did you know this?
1
Not at all
2
3
4
5
Perfectly