Шта је оквир хибернације?
Хибернација је отворени изворни објектно-релацијски пресликавање (ОРМ) утемељен упорношћу јава оквира. То је ОРМ алат за мапирање у Јави. Хибернација је дизајнирана са потребом да смањи сложеност док повезује релацијску базу података кроз јаву. Хибернативни оквир дизајниран је за мапирање јава објеката ради имплементације објектно оријентисаног програмирања у релацијској бази података. Овако се хибернација повезује на релацијску базу података за извршавање упита:
- Хиберната се директно повезује с наведеном базом података и користи хибернацијски језик упита (ХКЛ) за извршавање упита и мапирање резултата упита на јава објекте.
- Хибернате користи својства постављена у конфигурацији КСМЛ датотеке хибернације за мапирање резултата упита на јава објекте.
- Веза са базом података створена је помоћу сесије која помаже у спремању и проналажењу упорног Јава-објекта.
- Сесија је креирана користећи фабрички интерфејс Сессион. У идеалном случају, требало би да постоји само једна фабрика сесија по бази података.
Поређење хибернације и ЈДБЦ
Овде је упоредна табела која приказује поређење хибернације и ЈДБЦ:
Презимити | ЈДБЦ |
Хибернате садржи бетонске класе које пружају логику котловске плоче. | ЈДБЦ пружа само интерфејсе и апстрактне часове. |
Све изнимке које баца хибернација нису провјерене. | Све класе у ЈДБЦ-у избацују провјерене изузетке. |
Не захтева више управљања ресурсима и то интерно. | Потребно је више управљања ресурсима попут отварања и затварања ресурса. |
Директно похрањује јава предмете. | Не може директно чувати објекте. |
Подржава неовисне упите у бази података. | Подржава упите везане уз базу података. |
Подржава кеширање. | Не подржава кеширање. |
Подршка лијено учитавање. | Не подржава лењо пуњење. |
Хибернате Фрамеворк Арцхитецтуре
Хиберната прати слојевиту архитектуру и има следеће слојеве:
- Јава апликативни слој
- Зимски слој
- Бацкенд АПИ Лаиер
- Слој базе података
Хибернативни слој садржи следеће компоненте које су следеће:
1. Хибернатни конфигурациони објекат
Ово је први објект који треба да креира да би успоставио везу са базом података хибернацијом. Идеално би требало да се креира једном, током иницијализације апликације. Конфигурацијски објекат пружа следеће:
- Спајање базе података: Веза са базом података успостављена је коришћењем једне или више конфигурационих датотека. Датотеке су хиберниране .пропертиес и хибернате.цфг.кмл.
- Мапирање: Ово ствара мапирање између јава класа и релацијских табела база података.
2. Фабрика сесија
Конфигурацијски објект креиран у кораку 1 користи се за креирање фабричког објекта сесије који спрема хибернацијску конфигурацију помоћу дане конфигурацијске датотеке и ствара начин да се објект сесије креира. Пошто је фабрика сесија тежак објекат, обично се креира једном током почетне фазе апликације. Постоји потреба за фабричким објектом више сесија у случају да је потребно успоставити везе с више база података. Такође, фабрика сесија је безбедан објект.
3. Сесија
Објект сесије успоставља физичку везу с базом података. То је лаган објекат и требало би га створити сваки пут када је потребна интеракција са базом података. Ако објект треба истрајати или га треба дохватити, то се може учинити само помоћу објекта сесије. Објекат сесије треба затворити чим се заврши потребна операција, јер они не могу да се заштите навојем.
4. Трансакција
То је факултативни објект и представља јединицу посла обављеног с базом података. Објект трансакције осигурава да се све операције морају извршити или се ниједна од њих не мора извршити. То је једнослојни и краткотрајни објект.
5. Упитни објект
Овај објект користи структурирани језик упита (СКЛ) или Хибернате Куери Лангуаге (ХКЛ) за дохваћање података из базе података и инстанције објеката. Објект упита може се користити за ограничавање износа враћеног из упита, везивање параметара упита и извршавање упита.
Упити
Овде ћемо извршити неке упите који ће ствари учинити јаснијима. Размотримо ентитетског запосленог који има класу структурирану као:
Шифра:
Package com.edubca.hibernatetest;
@Entity
@Table(name = "EMPLOYEE")
public class Employee implements Serializable
(
private static final long serialVersionUID = -1798070786993123455L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "empID")
private Integer empID;
@Column(name = "NAME")
private String empName;
@Column(name = "SALARY")
private Integer salary;
//Getters and setters
)
Хибернате захтева КСМЛ датотеку која се зове хибернате.цфг.кмл која изгледа као:
Шифра:
com.mysql.jdbc.Driver
jdbc:mysql://localhost:3306/hibernatetest
edubca
edubcauser
org.hibernate.dialect.MySQLDialect
create
Испод је код који показује како се уметање и преузимање одвија у базу података хибернацијом:
Шифра:
//Create Configuration object
Configuration con=new AnnotationConfiguration().configure(new File("hibernate.cgf.xml"));
// create session factory using configuration
SessionFactory fact=conf.buildSessionFactory();
//get session from session factory
Session session=fact.openSession();
//Instantiate and populate Employee entity object
Employee emp=new Employee();
emp.setempID(1);
emp.setempName(“Yash”);
emp.setSalary(40000);
Employee emp1=new Employee();
emp1.setempID(2);
emp1.setempName(“Aman”);
emp1.setSalary(42000);
//persist emp object
session.save(emp);
//persist emp1 object
session.save(emp1);
//retrieve data from database
Query query=session.createQuery(“from Employee”);
List list= query.list();
For(Employee e : list)(
System.out.println(“Employee with ID ” + e.getempID() + “ has Name ” + e.getempName() + “ has salary ” + e.getsalary());
)
Излаз:
Запослени са ИД 1 има Име Иасх са 40000 плата.
Запослени са ИД 2 има Име Аман са 42000 плата.
Закључак
У овом чланку смо детаљно описали хибернацију, о њеној архитектури, поређење са ЈДБЦ и примерима кода. Такође смо приметили да хибернација омогућава једноставан и ефикасан начин интеракције са базом података.
Препоручени чланци
Ово је водич за Хибернате Фрамеворк. Овде смо разговарали о архитектури, компонентама и поређењу хибернације и ЈДБЦ-а са примерима кода. Такође можете погледати следеће чланке да бисте сазнали више -
- Оквири у Јави
- Шта су оквири за аутоматско тестирање?
- ХАДООП оквир
- .Нет Цоре вс. Нет Фрамеворк
- 2Д графика на Јави
- Тхров вс Тхров | Топ 5 разлика које би требало да знате