Файл: 1. Что такое Maven Для чего он нужен Как добавлять в проектбиблиотеки без него.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 04.05.2024
Просмотров: 16
Скачиваний: 0
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
SQLException public Statement getStatement()
throws
SQLException
Возвращает экземпляр Statement, который произвел данный результирующий набор public boolean next() throws
SQLException public boolean previous() throws
SQLException
Эти методы позволяют переместиться в результирующем наборе на одну строку вперед или назад. Во вновь созданном результирующем наборе курсор устанавливается перед первой строкой, поэтому первое обращение к методу next() влечет позиционирование на первую строку. Эти методы возвращают true, если остается строка для дальнейшего перемещения. Если строк для обработки больше нет, возвращается false.
Если открыт поток InputStream для предыдущей строки,
он закрывается. Также очищается цепочка предупреждений SQLWarning public void close() throws
SQLException
Осуществляет немедленное закрытие ResultSet вручную.
Обычно этого не требуется, так как закрытие Statement,
связанного с ResultSet, автоматически закрывает
ResultSet. К сожалению, не все разработчики
JDBC-драйверов придерживаются этих концепций,
например, драйвер Oracle самостоятельно не закрывает
ResultSet'ы, так что настоятельно рекомендуется закрывать вручную
9. Рассказать про паттерн DAO.
Data Access Object это паттерн, подразумевающий абстрагирование всей работы с базой данных в отдельном слое.
● Используется для абстрагирования и инкапсулирования доступа к источнику данных,
● управляет соединением с источником данных для получения и записи данных,
● реализует необходимый для работы с источником данных механизм доступа.
● выполняет функцию адаптера между компонентом и источником данных.
Главная задача шаблона DAO - построить мост между реляционной и объектной моделями данных. Интерфейс Dao определяет абстрактный API,
который выполняет операции CRUD с объектами типаT.
есть общая тенденция думать, что выпуск JPA снизил функциональность шаблона DAO до нуля, поскольку шаблон становится просто еще одним уровнем абстракции и сложности
, реализованным поверх уровня,
предоставляемого менеджером сущностей JPA.
10.Что такое JPA?
JPA (Java Persistence API) - это спецификация (стандарт, технология),
обеспечивающая объектно-реляционное отображение простых
JAVA-объектов (Plain Old Java Object - POJO) и предоставляющая
универсальный API для сохранения, получения и управления такими
объектами.
JPA (Java Persistence API) это спецификация Java EE и Java SE, описывающая систему управления сохранением java объектов в таблицы реляционных баз данных в удобном виде. Сама Java не содержит реализации JPA, однако существует много реализаций данной спецификации от разных компаний
, реализованным поверх уровня,
предоставляемого менеджером сущностей JPA.
10.Что такое JPA?
JPA (Java Persistence API) - это спецификация (стандарт, технология),
обеспечивающая объектно-реляционное отображение простых
JAVA-объектов (Plain Old Java Object - POJO) и предоставляющая
универсальный API для сохранения, получения и управления такими
объектами.
JPA (Java Persistence API) это спецификация Java EE и Java SE, описывающая систему управления сохранением java объектов в таблицы реляционных баз данных в удобном виде. Сама Java не содержит реализации JPA, однако существует много реализаций данной спецификации от разных компаний
(открытых и нет). Это не единственный способ сохранения java объектов в базы данных (ORM систем), но один из самых популярных в Java мире.
11. Что такое ORM?
это концепция/процесс преобразования данных из
объектно-ориентированного языка в реляционные БД и наоборот
ORM (англ. Object-Relational Mapping, рус. объектно-реляционное
отображение, или преобразование) — технология программирования,
которая связывает базы данных с концепциями объектно-ориентированных языков программирования, создавая «виртуальную объектную базу данных».
Необходимо обеспечить работу с данными в терминах классов, а не таблиц данных, и, напротив, преобразовать термины и данные классов в данные,
пригодные для хранения в СУБД. Необходимо также обеспечить интерфейс для CRUD-операций над данными. В общем, необходимо избавиться от необходимости писать SQL-код для взаимодействия в СУБД.
Преимущества ORM в сравнение с JDBC:
● Позволяет нашим бизнес методам обращаться не к БД, а к Java-классам
● Ускоряет разработку приложения
● Основан на JDBC
● Отделяет SQL-запросы от ОО модели
● Позволяет не думать о реализации БД
● Сущности основаны на бизнес-задачах, а не на стуктуре БД
● Управление транзакциями
12.Что такое Hibernate?
Hibernate одна из самых популярных открытых реализаций спецификации
Java Persistence API, стандарт де-факто. То есть JPA только описывает правила и API, а Hibernate реализует эти описания. ORM фреймворк для Java с открытым исходным кодом.
Библиотека для языка программирования Java, предназначенная для решения задач объектно-реляционного отображения (ORM), самая популярная реализация спецификации JPA. Позволяет сократить объёмы низкоуровневого программирования при работе с реляционными базами данных; может
использоваться как в процессе проектирования системы классов и таблиц «с нуля», так и для работы с уже существующей базой.
- решает задачу связи классов Java с таблицами базы данных
- обеспечивает связь типов данных Java с типами данных SQL
- предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки
, которое обычно тратится на ручное написание SQL- и JDBC-кода.
- автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос (портирование) приложения на любые базы данных SQL.
13.В чем разница между JPA и Hibernate? Как связаны все эти
понятия?
Смотри выше + JPA - это набор интерфейсов, Hibernate - это набор классов,
которые реализуют JPA интерфейсы.
Hibernate одна из самых популярных открытых реализаций последней версии спецификации. JPA только описывает правила и API, а Hibernate реализует эти описания, впрочем у Hibernate (как и у многих других реализаций JPA)
есть дополнительные возможности, не описанные в JPA (и не переносимые на другие реализации JPA).
14.Какие классы/интерфейсы относятся к JPA/Hibernate?
EntityManagerFactory — это встроенный интерфейс JPA. Он может быть создан с помощью класса Persistence, указав название блока сохранения из файла .xml сохранения. Вышеупомянутый код создает emf
EntityManagerFactory, ссылаясь на единицу сохранения PERSISTENCE.
EntityManagerFactory специфичен для базы данных. Итак, если вы хотите подключиться к другой базе данных, необходимо создать другой экземпляр
EntityManagerFactory. EntityManagerFactory может быть использован для создания экземпляров EntityManager.
- решает задачу связи классов Java с таблицами базы данных
- обеспечивает связь типов данных Java с типами данных SQL
- предоставляет средства для автоматической генерации и обновления набора таблиц, построения запросов и обработки полученных данных и может значительно уменьшить время разработки
, которое обычно тратится на ручное написание SQL- и JDBC-кода.
- автоматизирует генерацию SQL-запросов и освобождает разработчика от ручной обработки результирующего набора данных и преобразования объектов, максимально облегчая перенос (портирование) приложения на любые базы данных SQL.
13.В чем разница между JPA и Hibernate? Как связаны все эти
понятия?
Смотри выше + JPA - это набор интерфейсов, Hibernate - это набор классов,
которые реализуют JPA интерфейсы.
Hibernate одна из самых популярных открытых реализаций последней версии спецификации. JPA только описывает правила и API, а Hibernate реализует эти описания, впрочем у Hibernate (как и у многих других реализаций JPA)
есть дополнительные возможности, не описанные в JPA (и не переносимые на другие реализации JPA).
14.Какие классы/интерфейсы относятся к JPA/Hibernate?
EntityManagerFactory — это встроенный интерфейс JPA. Он может быть создан с помощью класса Persistence, указав название блока сохранения из файла .xml сохранения. Вышеупомянутый код создает emf
EntityManagerFactory, ссылаясь на единицу сохранения PERSISTENCE.
EntityManagerFactory специфичен для базы данных. Итак, если вы хотите подключиться к другой базе данных, необходимо создать другой экземпляр
EntityManagerFactory. EntityManagerFactory может быть использован для создания экземпляров EntityManager.
EntityManager также является встроенным интерфейсом JPA. Он может быть создан с помощью экземпляра EntityManagerFactory. Код выше создает
EntityManager экземпляр EM через EntityManagerFactory экземпляр emf.
EntityManager представляет собой соединение базы данных. Вы можете использовать его для выполнения операций с базой данных
, таких как вставка/обновление/удаление или запрос таблицы. Вышеупомянутый код вызывает метод PERSISTENCE для сохранения записи Fruit в таблице Fruit.
EntityTransaction также является встроенным интерфейсом JPA. Он может быть создан с помощью EntityManager. Код выше создает экземпляр EntityTransaction и через entityManager экземпляр EM. Сделка EntityTransaction инкапсулирует транзакцию базы данных. Вызов к методу начала транзакции и вызов для совершения сохраняет изменения в базе данных.
Query Запрос также является встроенным интерфейсом JPA. Он может быть создан с помощью EntityManager. Код выше создает Typed'y (который является под-интерфейс запроса) пример запроса через EntityManager экземпляр EM. Запрос можно использовать для выполнения запроса базы данных. В вышеуказаном коде используется запрос для получения всех записей Fruit. Интерфейс запроса имеет методы, которые для получения результатов выполнения запроса.
SessionFactory (org.hibernate.SessionFactory) - неизменяемый потокобезопасный объект с компилированным маппингом для одной базы данных. Необходимо инициализировать SessionFactory всего один раз.
Экземпляр SessionFactory используется для получения объектов Session,
которые используются для операций с базами данных.
Session (org.hibernate.Session) - однопоточный короткоживущий объект,
который предоставляет связь между объектами приложения и базой данных. Он оборачивает JDBC java.sql.Connection и работает как фабрика для org.hibernate.Transaction. Разработчик должен открывать сессию по необходимости и закрывать ее сразу после использования.
Экземпляр Session является интерфейсом между кодом в java приложении и hibernate framework и предоставляет методы для операций
CRUD.
Transaction (org.hibernate.Transaction) - однопоточный короткоживущий объект, используемый для атомарных операций. Это абстракция приложения от основных JDBC или JTA транзакций. org.hibernate.Session
может занимать несколько org.hibernate.Transaction в определенных случаях.
15.Основные аннотации Hibernate, рассказать.
@Entity Эта аннотация указывает Hibernate, что данный класс является сущностью (entity bean). Такой класс должен иметь конструктор по-умолчанию (пустой конструктор).
Сущность является простым классом POJO (POJO (англ. Plain Old Java
Object) — «старый добрый Java-объект», простой Java-объект, не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели) , который соответствует таблице базы данных. Он должен иметь поля, соответствующие столбцам таблицы баз данных. определённые требования:
● Наличие публично доступного конструктора без аргументов
● Класс, его методы и сохраняемые поля не должны быть final
● Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать
Serializable интерфейс.
● Сохраняемые поля должны быть доступны только с использованием методов класса.
@Table
С помощью этой аннотации мы говорим Hibernate, с какой именно таблицей необходимо связать (map) данный класс. Аннотация @Table имеет различные аттрибуты, с помощью которых мы можем указать имя таблицы, каталог, БД
и уникальность столбцов в таблец БД.
@Id
С помощью аннотации @Id мы указываем первичный ключ (Primary Key)
данного класса.
@GeneratedValue
15.Основные аннотации Hibernate, рассказать.
@Entity Эта аннотация указывает Hibernate, что данный класс является сущностью (entity bean). Такой класс должен иметь конструктор по-умолчанию (пустой конструктор).
Сущность является простым классом POJO (POJO (англ. Plain Old Java
Object) — «старый добрый Java-объект», простой Java-объект, не унаследованный от какого-то специфического объекта и не реализующий никаких служебных интерфейсов сверх тех, которые нужны для бизнес-модели) , который соответствует таблице базы данных. Он должен иметь поля, соответствующие столбцам таблицы баз данных. определённые требования:
● Наличие публично доступного конструктора без аргументов
● Класс, его методы и сохраняемые поля не должны быть final
● Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать
Serializable интерфейс.
● Сохраняемые поля должны быть доступны только с использованием методов класса.
@Table
С помощью этой аннотации мы говорим Hibernate, с какой именно таблицей необходимо связать (map) данный класс. Аннотация @Table имеет различные аттрибуты, с помощью которых мы можем указать имя таблицы, каталог, БД
и уникальность столбцов в таблец БД.
@Id
С помощью аннотации @Id мы указываем первичный ключ (Primary Key)
данного класса.
@GeneratedValue
Эта аннотация используется вместе с аннотацией @Id и определяет такие паметры, как strategy и generator
@Column
Аннотация @Column определяет к какому столбцу в таблице БД относится конкретное поле класса (аттрибут класса).
@ManyToMany, @ManyToOne, OneToMany
Диаграммы отношений сущностей, которая показывает связь "многие ко многим"
между двумя сущностями
16.Чем HQL отличается от SQL?
HQL(Hibernate Query Language)
Отличие между HQL и SQL состоит в том, что SQL работает таблицами в базе данных (далее – БД) и их столбацами, а HQL – с сохраняемыми объектами (Persistent Objects) и их полями (аттрибутами класса).
HQL это аналог SQL в мире Hibernate, ориентированный на запросы не к таблицам, а к классам.
Язык структурированного запроса, также широко известный как SQL,
является языком базы данных, который использует концепцию управления реляционными базами данных для управления данными. Управление данными включает выбор (извлекает данные из одной или нескольких таблиц), вставляет (добавляет одну или несколько строк в таблицу),
обновляет (отвечает за изменение значения одной или нескольких строк в таблице), удаляет ( ответственный за удаление одной или нескольких строк в таблице) и создание схемы по запросам.
HQL или Hibernate Query Language, расширяет концепцию объектно-ориентированного программирования до существующего SQL.
SQL основан на модели реляционной базы данных, тогда как HQL
представляет собой комбинацию объектно-ориентированного программирования с концепциями реляционных баз данных.
SQL управляет данными,
хранящимися в таблицах
, и изменяет их строки и столбцы. HQL обеспокоен объектами и его свойствами.
HQL работает с классами и их свойствами, чтобы окончательно отобразиться в структуру таблицы, SQL работает с таблицами и столбцами,
чтобы манипулировать данными
, хранящимися в них.
HQL поддерживает такие понятия, как полиморфизм, наследование,
ассоциация.
17.Что такое Query? Как передать в объект Query параметры?
Объектно-ориентированное представление запроса Hibernate. Запроса экземпляра получается вызовом Session.createQuery () . Этот интерфейс предоставляет некоторые дополнительные функции, помимо тех, которые предоставляются Session.iterate () и Session.find () :
● конкретная страница набора результатов может быть выбрана путем вызова setMaxResults (), setFirstResult ()
● могут использоваться именованные параметры запроса
● результаты могут быть возвращены как экземпляр
ScrollableResults.
● Session.createQuery(java.lang.String).ScrollableResults Далее еще примеры методов
В Query можно передавать параметры, чтобы сделать запросы более конкретными.
@Query("SELECT * FROM employee WHERE id = :employeeId")
Employee getById(long employeeId);
Перед параметром employeeId в запросе должно стоять двоеточие. Room возьмет значение этого параметра из метода и подставит его в запрос.
18.Какие можно устанавливать параметры в hbm2ddl, рассказать про
каждый из них.
hibernate.hbm2ddl.auto Автоматически проверяет или экспортирует DDL
схемы в базу данных при создании
Итак, список возможных вариантов:
● validate : проверяет схему, не вносит изменений в базу данных;
● update : обновляет схему, если схема отсутствует в БД, тогда схема создается;
● create : создает схему, уничтожая предыдущие данные;
● create-drop : удалить схему, когда SessionFactory закрывается явно,
обычно, когда приложение остановлено. схема не удаляется при закрытии сеанса. Он сбрасывается только при закрытии SessionFactory.
В случае, если я даю какое-либо значение этому свойству (скажем, abc вместо четырех значений, описанных выше), или оно просто остается пустым. Это показывает следующее поведение
-Если схема отсутствует в БД: - Создает схему
-Если схема присутствует в БД: - обновите схему.
drop - Схема базы данных будет удалена и создана впоследствии.
19.Требования JPA к Entity-классам? Не менее пяти.
1) Entity класс должен быть отмечен аннотацией Entity или описан в XML
файле конфигурации JPA;
2) Entity класс должен содержать public или protected конструктор без аргументов (он также может иметь конструкторы с аргументами);
3) Entity класс должен быть классом верхнего уровня (top-level class) - не вложенный;
4) Entity класс не может быть enum или интерфейсом;
5) Entity класс не может быть финальным классом (final class);
6) Entity класс не может содержать финальные поля или методы, если они участвуют в маппинге (persistent final methods or persistent final instance variables);
7) Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать Serializable интерфейс;
схемы в базу данных при создании
Итак, список возможных вариантов:
● validate : проверяет схему, не вносит изменений в базу данных;
● update : обновляет схему, если схема отсутствует в БД, тогда схема создается;
● create : создает схему, уничтожая предыдущие данные;
● create-drop : удалить схему, когда SessionFactory закрывается явно,
обычно, когда приложение остановлено. схема не удаляется при закрытии сеанса. Он сбрасывается только при закрытии SessionFactory.
В случае, если я даю какое-либо значение этому свойству (скажем, abc вместо четырех значений, описанных выше), или оно просто остается пустым. Это показывает следующее поведение
-Если схема отсутствует в БД: - Создает схему
-Если схема присутствует в БД: - обновите схему.
drop - Схема базы данных будет удалена и создана впоследствии.
19.Требования JPA к Entity-классам? Не менее пяти.
1) Entity класс должен быть отмечен аннотацией Entity или описан в XML
файле конфигурации JPA;
2) Entity класс должен содержать public или protected конструктор без аргументов (он также может иметь конструкторы с аргументами);
3) Entity класс должен быть классом верхнего уровня (top-level class) - не вложенный;
4) Entity класс не может быть enum или интерфейсом;
5) Entity класс не может быть финальным классом (final class);
6) Entity класс не может содержать финальные поля или методы, если они участвуют в маппинге (persistent final methods or persistent final instance variables);
7) Если объект Entity класса будет передаваться по значению как отдельный объект (detached object), например через удаленный интерфейс (through a remote interface), он так же должен реализовывать Serializable интерфейс;
8) Поля Entity класс должны быть напрямую доступны только методам самого Entity класса и не должны быть напрямую доступны другим классам,
использующим этот Entity. Такие классы должны обращаться только к методам (getter/setter методам или другим методам бизнес-логики в Entity классе);
9) Entity класс должен содержать первичный ключ, то есть атрибут или группу атрибутов которые уникально определяют запись этого Entity класса в базе данных.
20.Жизненный цикл Entity в Hibernate? Рассказать.
1) new — объект создан, но при этом ещё не имеет сгенерированных первичных ключей и пока ещё не сохранен в базе данных
;
2) managed — объект создан, управляется JPA, имеет сгенерированные первичные ключи;
3) detached — объект был создан, но не управляется (или больше не управляется) JPA;
4) removed — объект создан, управляется JPA, но будет удален после commit'a транзакции;
1. Transient.
В этом состоянии находятся заполненные экземпляры классов-сущностей. Они не подключены к сессии и поле Id у них не должно быть заполнено, иначе объект имеет состояние detached;
2. Persistent
Объект в данном состоянии, иначе называемый хранимая сущность,
присоединен к конкретной сессии и взаимодействует с БД. При работе с объектом данного типа в рамках транзакции все изменения объекта записываются в базу;
3. Detached.
Объект в данном состоянии отсоединён от сессии и может существовать или не существовать в БД.
Жизненный цикл гибернации
В Hibernate мы либо создаем объект сущности и сохраняем его в базе данных
, либо извлекаем данные сущности из базы данных. Здесь каждая сущность связана с жизненным циклом. Объект сущности проходит различные стадии жизненного цикла.
Жизненный цикл Hibernate содержит следующие состояния: -