Programmēšana

Kas ir JPA? Ievads Java noturības API

Kā specifikācija ir saistīta Java Persistence API neatlaidība, kas brīvi nozīmē jebkuru mehānismu, ar kuru Java objekti pārspēj to izveidošanas lietojumprogrammu procesu. Ne visi Java objekti ir jāsaglabā, taču lielākā daļa lietojumprogrammu saglabā galvenos biznesa objektus. JPA specifikācija ļauj definēt kas objektus vajadzētu saglabāt, un šie objekti ir jāsaglabā jūsu Java lietojumprogrammās.

JPA pati par sevi nav instruments vai ietvars; drīzāk tas definē jēdzienu kopumu, ko var ieviest ar jebkuru rīku vai ietvaru. Kaut arī JPA objektu-relāciju kartēšanas (ORM) modelis sākotnēji tika balstīts uz hibernācijas režīmu, kopš tā laika tas ir attīstījies. Tāpat kā sākotnēji JPA bija paredzēta lietošanai ar relāciju / SQL datu bāzēm, dažas JPA ieviešanas iespējas tika paplašinātas lietošanai ar NoSQL datu krātuvēm. Populārs ietvars, kas atbalsta JPA ar NoSQL, ir EclipseLink, JPA 2.2 atsauces ieviešana.

JPA 2.2 Džakartā EE

Java Persistence API vispirms tika izlaista kā EJB 3.0 specifikācijas (JSR 220) apakškopa Java EE 5. Kopš tā laika tā ir attīstījusies kā sava specifikācija, sākot ar JPA 2.0 izlaišanu Java EE 6 (JSR 317). Kopš šī raksta JPA 2.2 ir pieņemta turpināšanai kā daļa no Džakarta EE.

JPA un pārziemot

Sakarā ar savstarpēji saistīto vēsturi Hibernate un JPA bieži tiek sajaukti. Tomēr tāpat kā Java Servlet specifikācija, arī JPA ir radījusi daudzus saderīgus rīkus un ietvarus; Hibernāts ir tikai viens no tiem.

Hibernate ir Gavina Kinga izstrādātais un 2002. gada sākumā izlaistais ORM bibliotēka Java. King izstrādāja hibernātu kā alternatīvu pupiņu neatlaidībai. Sistēma tajā laikā bija tik populāra un tik vajadzīga, ka daudzas tās idejas tika pieņemtas un kodificētas pirmajā APA specifikācijā.

Mūsdienās Hibernate ORM ir viens no nobriedušākajiem JPA ieviešanas veidiem un joprojām ir populāra ORM opcija Java. Hibernate ORM 5.3.8 (šī raksta pašreizējā versija) ievieš JPA 2.2. Turklāt Hibernate rīku saime ir paplašināta, iekļaujot tādus populārus rīkus kā Hibernate Search, Hibernate Validator un Hibernate OGM, kas atbalsta domēna modeļa noturību NoSQL.

JPA un EJB

Kā jau iepriekš tika atzīmēts, JPA tika ieviesta kā EJB 3.0 apakškopa, bet kopš tā laika tā ir attīstījusies kā sava specifikācija. EJB ir specifikācija, kuras uzmanības centrā ir atšķirība no JPA, un tā tiek ieviesta EJB konteinerā. Katrā EJB konteinerā ir noturības slānis, ko nosaka JPA specifikācija.

Kas ir Java ORM?

Kaut arī to izpilde atšķiras, katra JPA ieviešana nodrošina sava veida ORM slāni. Lai saprastu ar JPA un ar JPA saderīgus rīkus, jums labi jāpārzina ORM.

Objekta relāciju kartēšana ir a uzdevums- izstrādātājiem ir pamatots iemesls izvairīties no manuālas darbības. Tāds ietvars kā Hibernate ORM vai EclipseLink kodē šo uzdevumu bibliotēkā vai ietvarā ORM slānis. Kā daļa no lietojumprogrammas arhitektūras ORM slānis ir atbildīgs par programmatūras objektu konvertēšanas pārvaldību, lai mijiedarbotos ar relāciju datu bāzes tabulām un kolonnām. Java valodā ORM slānis pārveido Java klases un objektus tā, lai tos varētu uzglabāt un pārvaldīt relāciju datu bāzē.

Pēc noklusējuma saglabājamā objekta nosaukums kļūst par tabulas nosaukumu, bet lauki - par kolonnām. Kad tabula ir iestatīta, katra tabulas rinda atbilst objektam lietojumprogrammā. Objektu kartēšana ir konfigurējama, taču noklusējumi parasti darbojas labi.

JPA ar NoSQL

Vēl diezgan nesen ar relāciju nesaistītas datubāzes bija retums kuriozs. NoSQL kustība visu to mainīja, un tagad Java izstrādātājiem ir pieejamas dažādas NoSQL datu bāzes. Daži JPA ieviešanas gadījumi ir attīstījušies, lai aptvertu NoSQL, tostarp Hibernate OGM un EclipseLink.

1. attēlā parādīta JPA un ORM slāņa loma lietojumprogrammu izstrādē.

JavaWorld /

Java ORM slāņa konfigurēšana

Kad jūs izveidojat jaunu projektu, lai izmantotu JPA, jums būs jākonfigurē datu veikals un JPA nodrošinātājs. Jūs konfigurēsit a datastore savienotājs lai izveidotu savienojumu ar izvēlēto datu bāzi (SQL vai NoSQL). Jūs arī iekļausit un konfigurēsit JPA nodrošinātājs, kas ir tāda sistēma kā Hibernate vai EclipseLink. Kaut arī jūs varat konfigurēt JPA manuāli, daudzi izstrādātāji izvēlas izmantot Spring's out-of-the-box atbalstu. Skatīt "JPA instalēšana un iestatīšana"zemāk, lai demonstrētu gan manuālu, gan pavasarīgu JPA instalēšanu un iestatīšanu.

Java datu objekti

Java datu objekti ir standartizēts noturības ietvars, kas atšķiras no JPA, galvenokārt atbalstot noturības loģiku objektā un ar ilgstošu atbalstu darbam ar nesaistītiem datu krājumiem. JPA un JDO ir pietiekami līdzīgas, ka JDO nodrošinātāji bieži atbalsta arī JPA. Skatiet Apache JDO projektu, lai uzzinātu vairāk par JDO saistībā ar citiem noturības standartiem, piemēram, JPA un JDBC.

Datu noturība Java

No programmēšanas viedokļa ORM slānis ir adaptera slānis: tā pielāgo objektu grafiku valodu SQL un relāciju tabulu valodai. ORM slānis ļauj objektorientētiem izstrādātājiem izveidot programmatūru, kas saglabā datus, nekad neatstājot objektorientēto paradigmu.

Izmantojot JPA, jūs izveidojat karte no datu krātuves līdz lietojumprogrammas datu modeļa objektiem. Tā vietā, lai definētu, kā objekti tiek saglabāti un izgūti, jūs definējat kartēšanu starp objektiem un datu bāzi un pēc tam izsaucat JPA, lai tos saglabātu. Ja izmantojat relāciju datu bāzi, lielu daļu faktiskā savienojuma starp lietojumprogrammas kodu un datu bāzi tad apstrādās JDBC, Java datu bāzes savienojamības API.

Kā spec, JPA nodrošina metadatu anotācijas, kuru izmantojat, lai definētu kartēšanu starp objektiem un datu bāzi. Katra JPA ieviešana nodrošina savu JPA anotāciju motoru. APA specifikācija arī nodrošina PersistanceManager vai EntityManager, kas ir galvenie saskares punkti ar JPA sistēmu (kur jūsu biznesa loģikas kods norāda sistēmai, ko darīt ar kartētajiem objektiem).

Lai to visu padarītu konkrētāku, apsveriet 1. sarakstu, kas ir vienkārša datu klase mūziķa modelēšanai.

Uzskaitīšana 1. Vienkārša datu klase Java

 publiskā klase Mūziķis {privāts Garais id; privāts virknes nosaukums; privāts Instrument mainInstrument; privātās ArrayList izrādes = new ArrayList (); publiskais mūziķis (garais ID, virknes nosaukums) {/ * konstruktoru iestatītāji ... * /} public void setName (virknes nosaukums) {this.name = name; } public String getName () {atgriezt šo.nosaukumu; } public void setMainInstrument (Instrument instr) {this.instrument = instr; } public Instrument getMainInstrument () {return this.instrument; } // ... Citi getters un seters ...} 

The Mūziķis 1. saraksta klase tiek izmantota datu glabāšanai. Tas var saturēt primitīvus datus, piemēram, nosaukums laukā. Tas var arī uzturēt attiecības ar citām klasēm, piemēram, galvenaisInstruments un izrādes.

Mūziķis's iemesls būt ir jāsatur dati. Šāda veida klases dažreiz tiek dēvētas par DTO vai datu pārsūtīšanas objekts. DTO ir programmatūras izstrādes kopīga iezīme. Lai gan tie satur daudzu veidu datus, tajos nav biznesa loģikas. Datu objektu pastāvēšana programmatūras izstrādē ir visuresoša problēma.

Datu noturība ar JDBC

Viens no veidiem, kā saglabāt Mūziķis klases relāciju datu bāzei būtu izmantot JDBC bibliotēku. JDBC ir abstrakcijas slānis, kas ļauj lietojumprogrammai izdot SQL komandas, nedomājot par pamata datu bāzes ieviešanu.

2. saraksts parāda, kā jūs varētu pastāvēt Mūziķis klase, izmantojot JDBC.

Saraksts 2. JDBC ieraksta ievietošana

 Mūziķis Džordžs Harisons = jauns mūziķis (0, "Džordžs Harisons"); String myDriver = "org.gjt.mm.mysql.Driver"; Virkne myUrl = "jdbc: mysql: // localhost / test"; Klase.vārdam (myDriver); Savienojuma savienojums = DriverManager.getConnection (myUrl, "root", ""); Virknes vaicājums = "ievietot lietotāju (id, nosaukums) vērtības (?,?)"; PreparedStatement sagatavotsStmt = conn.prepareStatement (vaicājums); sagatavotsStmt.setInt (1, 0); sagatavotsStmt.setString (2, "Džordžs Harisons"); sagatavotsStmt.setString (2, "Drupa"); sagatavotsStmt.execute (); savienot. aizvērt (); // Kļūdu apstrāde ir noņemta īsuma dēļ 

2. saraksta kods ir diezgan pašdokumentējošs. The Džordžs Harisons objekts varētu nākt no jebkuras vietas (priekšpuses iesniegšana, ārējais pakalpojums utt.), un tā ID un nosaukuma lauki ir iestatīti. Pēc tam objekta lauki tiek izmantoti SQL vērtību piegādei ievietot paziņojums, apgalvojums. (The Sagatavots paziņojums klase ir daļa no JDBC, piedāvājot veidu, kā droši lietot vērtības SQL vaicājumam.)

Lai gan JDBC ļauj kontrolēt manuālo konfigurāciju, tā ir apgrūtinoša salīdzinājumā ar JPA. Lai modificētu datu bāzi, vispirms jāizveido SQL vaicājums, kas no jūsu Java objekta norāda relāciju datu bāzes tabulas. Pēc tam, kad mainās objekta paraksts, jums ir jāpārveido SQL. Ar JDBC SQL uzturēšana kļūst par pašu uzdevumu.

Datu noturība ar APA

Tagad apsveriet 3. sarakstu, kur mēs joprojām pastāvam Mūziķis klase, izmantojot JPA.

Džordžs Harisons turpina darboties JPA

 Mūziķis Džordžs Harisons = jauns mūziķis (0, "Džordžs Harisons"); mūziķisManager.save (georgeHarrison); 

3. saraksts aizstāj manuālo SQL no 2. saraksta ar vienu rindiņu, session.save (), kas uzdod JPA saglabāt objektu. Turpmāk SQL pārveidošanu apstrādā sistēma, tāpēc jums nekad nav jāatstāj objektorientētā paradigma.

Metadatu anotācijas JPA

3. saraksta burvība ir rezultāts a konfigurācija, kas izveidots, izmantojot APA anotācijas. Izstrādātāji izmanto anotācijas, lai informētu JPA, kuri objekti ir jāsaglabā un kā tie jāturpina.

4. saraksts parāda Mūziķis klase ar vienu JPA anotāciju.

4. saraksts. APA @Entity anotācija

 @Entity publiskās klases mūziķis {// ..class body} 

Dažreiz tiek saukti noturīgi priekšmeti vienības. Piestiprināšana @Entity uz tādu klasi kā Mūziķis informē APA, ka šī klase un tās objekti ir jāsaglabā.

XML pret anotācijām balstīta konfigurācija

JPA atbalsta arī ārēju XML failu izmantošanu anotāciju vietā, lai definētu klases metadatus. Bet kāpēc tu to darītu pats sev?

JPA konfigurēšana

Tāpat kā lielākā daļa mūsdienu sistēmu, arī JPA aptver kodēšana pēc vienošanās (pazīstams arī kā konvenciju par konfigurāciju), kurā ietvars nodrošina noklusējuma konfigurāciju, pamatojoties uz nozares labāko praksi. Kā viens piemērs - klase ar nosaukumu Mūziķis pēc noklusējuma tiktu kartēts ar datu bāzes tabulu, ko sauc Mūziķis.

Parastā konfigurācija ir laika taupīšana, un daudzos gadījumos tā darbojas pietiekami labi. Ir arī iespējams pielāgot savu JPA konfigurāciju. Kā piemēru varat izmantot APA @Tabula anotācija, lai norādītu tabulu, kurā Mūziķis klase būtu jāuzglabā.

Saraksts 5. JPA @Table anotācija

 @Entity @Table (name = "musician") public class Mūziķis {// ..class body} 

5. saraksts liek APA saglabāt entītiju (Mūziķis klase) uz mūziķis tabula.

Primārā atslēga

JPA, primārā atslēga ir lauks, ko izmanto, lai unikāli identificētu katru objektu datu bāzē. Primārā atslēga ir noderīga, lai objektus atsauktu un saistītu ar citām entītijām. Ikreiz, kad objektu glabājat tabulā, norādiet arī lauku, kuru izmantot kā galveno atslēgu.

6. sarakstā mēs norādām JPA, kuru lauku izmantot Mūziķisgalvenā atslēga.

Saraksts 6. Primārās atslēgas norādīšana

 @Entity publiskās klases mūziķis {@Id private Long id; 

Šajā gadījumā mēs izmantojām APA @Id anotācija, lai norādītu id lauks kā Mūziķisgalvenā atslēga. Pēc noklusējuma šī konfigurācija pieņem, ka primāro atslēgu iestatīs datu bāze, piemēram, ja laukā ir iestatīts automātiskais pieaugums uz tabulas.

JPA atbalsta citas objekta primārās atslēgas ģenerēšanas stratēģijas. Tajā ir arī anotācijas atsevišķu lauku nosaukumu maiņai. Kopumā JPA ir pietiekami elastīga, lai pielāgotos jebkurai noturības kartēšanai, kas jums varētu būt nepieciešama.

CRUD operācijas

Kad esat klasificējis klasi datu bāzes tabulā un izveidojis tās primāro atslēgu, jums ir viss nepieciešamais, lai izveidotu, izgūtu, dzēstu un atjauninātu šo klasi datu bāzē. Zvanīšana session.save () izveidos vai atjauninās norādīto klasi atkarībā no tā, vai primārās atslēgas lauks nav derīgs vai attiecas uz esošu entītiju. Zvanīšana entityManager.remove () izdzēsīs norādīto klasi.

Vienību attiecības JPA

Objekta vienkārša noturēšana ar primitīvu lauku ir tikai puse vienādojuma. APA ir arī spējīga pārvaldīt vienības viena otrai. Gan tabulās, gan objektos ir iespējami četru veidu entītiju sakari:

    1. Viens pret daudziem
    2. Daudzi pret vienu
    3. Daudzi pret daudziem
    4. Viens pret vienu

Katrs attiecību veids apraksta, kā entītija ir saistīta ar citām vienībām. Piemēram, Mūziķis vienībai varētu būt attiecības viens pret daudziem ar Izrāde, uzņēmums, ko pārstāv kolekcija, piemēram, Saraksts vai Iestatiet.

Ja Mūziķis iekļauts a Grupa šajā jomā attiecības starp šīm vienībām varētu būt daudzi pret vienu, kas norāda uz Mūziķiss uz singlu Grupa klasē. (Pieņemot, ka katrs mūziķis uzstājas tikai vienā grupā.)

Ja Mūziķis iekļauts a Grupas biedri jomā, kas varētu būt a attiecības pret daudziem ar citiem Mūziķis vienības.

Visbeidzot, Mūziķis varētu būt attiecības viens pret vienu ar Citāts vienība, ko izmanto, lai attēlotu slavenu citātu: Citāts slavens Citāts = jauns citāts ().

Attiecību tipu noteikšana

JPA ir anotācijas katram tā attiecību kartēšanas veidam. 7. saraksts parāda, kā jūs varētu anotēt attiecības “viens pret daudziem” Mūziķis un Izrādes.

Uzskaitījums 7. Attiecību “viens pret daudziem” anotēšana

$config[zx-auto] not found$config[zx-overlay] not found