JPA - komponenty ORM
Większość współczesnych aplikacji używa relacyjnych baz danych do przechowywania danych. Ostatnio wielu dostawców przeszło na obiektową bazę danych, aby zmniejszyć obciążenie związane z utrzymaniem danych. Oznacza to, że obiektowe bazy danych lub technologie obiektowo-relacyjne zajmują się przechowywaniem, pobieraniem, aktualizacją i konserwacją. Podstawową częścią technologii relacyjnych obiektów jest mapowanie pliku orm.xml. Ponieważ XML nie wymaga kompilacji, możemy łatwo wprowadzać zmiany w wielu źródłach danych przy mniejszym administrowaniu.
Mapowanie obiektowo-relacyjne
Mapowanie obiektowo-relacyjne (ORM) w skrócie opisuje, czym jest ORM i jak to działa. ORM to umiejętność programowania do ukrywania danych z typu obiektowego na relacyjny i odwrotnie.
Główną cechą ORM jest mapowanie lub wiązanie obiektu z jego danymi w bazie danych. Podczas mapowania musimy wziąć pod uwagę dane, typ danych i ich relacje z własną jednostką lub encją w dowolnej innej tabeli.
Zaawansowane funkcje
Idiomatic persistence : Umożliwia pisanie klas trwałości przy użyciu klas obiektowych.
High Performance : Ma wiele technik pobierania i obiecujących technik blokowania.
Reliable: Jest bardzo stabilny i wybitny. Używany przez wielu programistów przemysłowych.
Architektura ORM
Tutaj postępuj zgodnie z architekturą ORM.
Powyższa architektura wyjaśnia, w jaki sposób dane obiektowe są przechowywane w relacyjnej bazie danych w trzech fazach.
Faza 1
Pierwsza faza, nazwana jako Object datafaza zawiera klasy POJO, interfejsy usług i klasy. Jest to główna warstwa komponentów biznesowych, która zawiera operacje i atrybuty logiki biznesowej.
Na przykład weźmy bazę danych pracowników jako schemat
Klasa POJO pracownika zawiera atrybuty, takie jak identyfikator, imię i nazwisko, wynagrodzenie i stanowisko. Oraz metody takie jak setter i getter metody tych atrybutów.
Klasy DAO / Service dla pracowników zawierają metody obsługi, takie jak tworzenie pracownika, znajdowanie pracownika i usuwanie pracownika.
Faza 2
Druga faza nazwana jako mapping lub persistence faza, która zawiera dostawcę JPA, plik mapowania (ORM.xml), moduł ładujący JPA i siatkę obiektów.
JPA Provider: Produkt dostawcy, który zawiera smak JPA (javax.persistence). Na przykład Eclipselink, Toplink, Hibernate itp.
Mapping file : Plik odwzorowania (ORM.xml) zawiera konfigurację odwzorowania między danymi w klasie POJO a danymi w relacyjnej bazie danych.
JPA Loader: Moduł ładujący JPA działa jak pamięć podręczna, która może ładować dane siatki relacyjnej. Działa jak kopia bazy danych do interakcji z klasami usług dla danych POJO (atrybuty klasy POJO).
Object Grid: Siatka obiektów jest tymczasową lokalizacją, w której można przechowywać kopię danych relacyjnych, np. Pamięć podręczną. Wszystkie zapytania do bazy danych najpierw dotyczą danych w siatce obiektów. Dopiero po zatwierdzeniu wpływa na główną bazę danych.
Faza 3
Trzecia faza to faza danych relacyjnych. Zawiera dane relacyjne, które są logicznie połączone z komponentem biznesowym. Jak wspomniano powyżej, tylko wtedy, gdy komponent biznesowy zatwierdza dane, są one fizycznie przechowywane w bazie danych. Do tego czasu zmodyfikowane dane są przechowywane w pamięci podręcznej w formacie siatki. To samo dotyczy pozyskiwania danych.
Mechanizm programowego współdziałania powyższych trzech faz nazywany jest mapowaniem relacyjno-obiektowym.
Mapping.xml
Plik mapping.xml ma za zadanie poinstruować dostawcę JPA o mapowaniu klas Entity z tabelami bazy danych.
Weźmy na przykład podmiot Pracownik, który zawiera cztery atrybuty. Klasa POJO jednostki Pracownik o nazwieEmployee.java następująco:
public class Employee {
private int eid;
private String ename;
private double salary;
private String deg;
public Employee(int eid, String ename, double salary, String deg) {
super( );
this.eid = eid;
this.ename = ename;
this.salary = salary;
this.deg = deg;
}
public Employee( ) {
super();
}
public int getEid( ) {
return eid;
}
public void setEid(int eid) {
this.eid = eid;
}
public String getEname( ) {
return ename;
}
public void setEname(String ename) {
this.ename = ename;
}
public double getSalary( ) {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getDeg( ) {
return deg;
}
public void setDeg(String deg) {
this.deg = deg;
}
}
Powyższy kod to klasa POJO podmiotu pracowniczego. Zawiera cztery atrybuty: eid, ename, pensja i deg. Weź pod uwagę, że te atrybuty to pola tabeli w bazie danych, a eid to klucz podstawowy tej tabeli. Teraz musimy zaprojektować dla niego plik mapowania hibernacji. Plik odwzorowania o nazwiemapping.xml następująco:
<? xml version="1.0" encoding="UTF-8" ?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm
http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
version="1.0">
<description> XML Mapping file</description>
<entity class="Employee">
<table name="EMPLOYEETABLE"/>
<attributes>
<id name="eid">
<generated-value strategy="TABLE"/>
</id>
<basic name="ename">
<column name="EMP_NAME" length="100"/>
</basic>
<basic name="salary">
</basic>
<basic name="deg">
</basic>
</attributes>
</entity>
</entity-mappings>
Powyższy skrypt służący do mapowania klasy encji z tabelą bazy danych. W tym pliku
<entity-mappings> : tag definiuje definicję schematu, aby umożliwić umieszczanie znaczników encji w pliku xml.
<description> : tag definiuje opis aplikacji.
<entity>: tag definiuje klasę jednostki, którą chcesz przekonwertować na tabelę w bazie danych. Klasa atrybutu definiuje nazwę klasy jednostki POJO.
<table>: tag definiuje nazwę tabeli. Jeśli chcesz zachować nazwę klasy jako nazwę tabeli, ten znacznik nie jest potrzebny.
<attributes> : znacznik definiuje atrybuty (pola w tabeli).
<id>: tag definiuje klucz podstawowy tabeli. Plik<generated-value> tag określa, jak przypisać wartość klucza podstawowego, taką jak Automatyczny, Ręczny lub pobrany z Sekwencji.
<basic> : tag służy do definiowania pozostałych atrybutów tabeli.
<column-name> : tag służy do definiowania nazwy pola tabeli zdefiniowanej przez użytkownika.
Adnotacje
Zwykle pliki Xml są używane do konfigurowania określonego składnika lub mapowania dwóch różnych specyfikacji składników. W naszym przypadku musimy osobno utrzymywać xml we frameworku. Oznacza to, że pisząc plik xml mapowania musimy porównać atrybuty klasy POJO z tagami encji w pliku mapping.xml.
Oto rozwiązanie: w definicji klasy możemy zapisać część konfiguracyjną za pomocą adnotacji. Adnotacje są używane dla klas, właściwości i metod. Adnotacje zaczynają się od symbolu „@”. Adnotacje są deklarowane przed zadeklarowaniem klasy, właściwości lub metody. Wszystkie adnotacje JPA są zdefiniowane w pakiecie javax.persistence.
Poniżej znajduje się lista adnotacji użytych w naszych przykładach
Adnotacja | Opis |
---|---|
@Jednostka | Ta adnotacja określa, aby zadeklarować klasę jako jednostkę lub tabelę. |
@Stół | Ta adnotacja określa, aby zadeklarować nazwę tabeli. |
@Podstawowy | Ta adnotacja jawnie określa pola bez ograniczeń. |
@Embedded | Ta adnotacja określa właściwości klasy lub jednostki, której wystąpienie wartości klasy osadzalnej. |
@ID | Ta adnotacja określa właściwość, która służy do identyfikacji (klucz podstawowy tabeli) klasy. |
@GeneratedValue | Ta adnotacja określa, w jaki sposób można zainicjować atrybut tożsamości, na przykład automatycznie, ręcznie lub wartość pobrana z tabeli sekwencji. |
@Przejściowy | Ta adnotacja określa właściwość, która nie jest trwała, tj. Wartość nigdy nie jest przechowywana w bazie danych. |
@Kolumna | Ta adnotacja służy do określania kolumny lub atrybutu właściwości trwałości. |
@SequenceGenerator | Ta adnotacja służy do definiowania wartości właściwości określonej w adnotacji @GeneratedValue. Tworzy sekwencję. |
@TableGenerator | Ta adnotacja służy do określania generatora wartości dla właściwości określonej w adnotacji @GeneratedValue. Tworzy tabelę do generowania wartości. |
@Typ dostępu | Ten typ adnotacji służy do ustawiania typu dostępu. Jeśli ustawisz @AccessType (FIELD), nastąpi dostęp do mądrego pola. Jeśli ustawisz @AccessType (PROPERTY), nastąpi ocena według właściwości. |
@JoinColumn | Ta adnotacja służy do określenia powiązania jednostek lub kolekcji jednostek. Jest to używane w asocjacjach typu „wiele do jednego” i „jeden do wielu”. |
@UniqueConstraint | Ta adnotacja służy do określenia pola, unikatowego ograniczenia dla tabeli głównej lub dodatkowej. |
@ColumnResult | Ta adnotacja odwołuje się do nazwy kolumny w zapytaniu SQL za pomocą klauzuli select. |
@ManyToMany | Ta adnotacja służy do definiowania relacji wiele do wielu między tabelami łączenia. |
@ManyToOne | Ta adnotacja służy do definiowania relacji wiele do jednego między tabelami łączenia. |
@Jeden za dużo | Ta adnotacja służy do definiowania relacji jeden do wielu między tabelami łączenia. |
@Jeden na jednego | Ta adnotacja służy do definiowania relacji jeden do jednego między tabelami łączenia. |
@NamedQueries | Ta adnotacja służy do określania listy nazwanych zapytań. |
@NamedQuery | Ta adnotacja służy do określania zapytania przy użyciu nazwy statycznej. |
Java Bean Standard
Klasa Java hermetyzuje wartości i zachowania instancji w pojedynczym wywołanym obiekcie. Java Bean jest składnikiem lub obiektem do tymczasowego przechowywania i wielokrotnego użytku. Jest to klasa możliwa do serializacji, która ma domyślny konstruktor oraz metody pobierające i ustawiające do indywidualnego inicjowania atrybutów instancji.
Konwencje fasoli
Bean zawiera domyślny konstruktor lub plik zawierający zserializowane wystąpienie. Dlatego fasola może utworzyć instancję fasoli.
Właściwości fasoli można podzielić na właściwości boolowskie i inne niż boolowskie.
Właściwość niebędąca wartością logiczną zawiera getter i setter metody.
Właściwość logiczna zawiera setter i is metoda.
Gettermetoda dowolnej właściwości powinna zaczynać się od małej litery „get” (konwencja metody w języku Java) i być kontynuowana z nazwą pola zaczynającą się od dużej litery. Np. Nazwa pola to „wynagrodzenie”, dlatego metoda pobierania tego pola to „getSalary ()”.
Settermetoda dowolnej właściwości powinna zaczynać się od małej litery „zestaw” (konwencja metody java), kontynuowanej nazwą pola zaczynającą się od dużej litery i wartością argumentu do ustawienia na pole. Np. Nazwa pola to „wynagrodzenie”, dlatego metoda ustawiająca to pole to „setSalary (double sal)”.
Dla właściwości Boolean jest to metoda sprawdzająca, czy jest prawdziwa, czy fałszywa. Np. Właściwość logiczna „pusta”, metoda is tego pola to „isEmpty ()”.