Hva ER JPA? Introduksjon til Java Persistence API

Som en spesifikasjon er Java Persistence API opptatt av utholdenhet, som løst betyr enhver mekanisme Som Java-objekter overlever søknadsprosessen som skapte dem. Ikke Alle Java-objekter må vedvare, men de fleste applikasjoner vedvarer viktige forretningsobjekter. JPA-spesifikasjonen lar deg definere hvilke objekter som skal vedvare, og hvordan disse objektene skal vedvare I Java-applikasjonene dine.

I SEG selv ER JPA ikke et verktøy eller rammeverk; snarere definerer det et sett med begreper som kan implementeres av ethvert verktøy eller rammeverk. MENS JPAS object-relational mapping (ORM) – modell opprinnelig var Basert På Hibernate, har den siden utviklet seg. På samme måte, MENS JPA opprinnelig var ment for bruk med relasjonelle / SQL-databaser, har noen jpa-implementeringer blitt utvidet for Bruk Med NoSQL-datalagre. Et populært rammeverk som støtter JPA Med NoSQL Er EclipseLink, referanseimplementeringen FOR JPA 2.2.

Jpa og Hibernate

På grunn av sin sammenflettede historie blir Hibernate og JPA ofte sammenflettet. Men SOM Java Servlet-spesifikasjonen har JPA skapt mange kompatible verktøy og rammer; Hibernate er bare en av dem.Utviklet Av Gavin King og utgitt tidlig i 2002, Er Hibernate ET ORM-bibliotek for Java. King utviklet Hibernate som et alternativ til entity beans for utholdenhet. Rammeverket var så populært, og så nødvendig på den tiden, at mange av sine ideer ble vedtatt og kodifisert i den første jpa spesifikasjon.I Dag Er Hibernate ORM en av DE mest modne jpa-implementeringene, og fortsatt et populært alternativ FOR ORM i Java. Hibernate ORM 5.3.8 (den gjeldende versjonen som i skrivende stund) implementerer JPA 2.2. I Tillegg Har Hibernate familie av verktøy utvidet til å omfatte populære verktøy som Hibernate Search, Hibernate Validator, Og Hibernate OGM, som støtter domene-modell utholdenhet For NoSQL.

Hva Er Java ORM?

mens de er forskjellige i utførelse, gir hver jpa-implementering en slags ORM-lag. For å forstå jpa og jpa-kompatible verktøy, må DU ha en god forståelse PÅ ORM.

Objektrelasjonell kartlegging er en oppgave som utviklere har god grunn til å unngå å gjøre manuelt. Et rammeverk som Hibernate ORM eller EclipseLink kodifiserer denne oppgaven i et bibliotek eller rammeverk, ET ORM-lag. SOM en del av applikasjonsarkitekturen er ORM-laget ansvarlig for å administrere konvertering av programvareobjekter for å samhandle med tabellene og kolonnene i en relasjonsdatabase. I Java konverterer ORM-laget Java-klasser og objekter slik at De kan lagres og administreres i en relasjonsdatabase.

som standard blir navnet på objektet som vedvarer, navnet på tabellen, og felt blir kolonner. Når tabellen er satt opp, tilsvarer hver tabellrad et objekt i programmet. Objektkartlegging er konfigurerbar, men standarder har en tendens til å fungere godt.

Figur 1 illustrerer ROLLEN SOM JPA og ORM-laget i applikasjonsutvikling.

JavaWorld / IDG

Figur 1. JPA og ORM-laget

Konfigurere Java ORM-laget

når du setter opp et nytt prosjekt for å bruke JPA, må du konfigurere datalager og jpa-leverandøren. Du konfigurerer en datastore-kontakt for å koble til den valgte databasen (SQL eller NoSQL). Du vil også inkludere OG konfigurere jpa-leverandøren, som er et rammeverk som Hibernate eller EclipseLink. Selv om DU kan konfigurere JPA manuelt, velger mange utviklere Å bruke Vårens out-of-the-box-støtte. Se «JPA installasjon og oppsett» nedenfor for en demonstrasjon av både manuell og Fjærbasert jpa installasjon og oppsett.

data persistence I Java

FRA et programmeringsperspektiv ER ORM-laget et adapterlag: den tilpasser språket til objektgrafer til SPRÅKET I SQL og relasjonstabeller. ORM-laget tillater objektorienterte utviklere å bygge programvare som vedvarer data uten å forlate det objektorienterte paradigmet.

når DU bruker JPA, oppretter du et kart fra datalageret til programmets datamodellobjekter. I stedet for å definere hvordan objekter lagres og hentes, definerer du tilordningen mellom objekter og databasen, og deretter påberope JPA for å fortsette dem. Hvis du bruker en relasjonsdatabase, vil mye av den faktiske forbindelsen mellom programkoden og databasen bli håndtert av JDBC, Java Database Connectivity API.

SOM en spec gir JPA metadataannotasjoner, som du bruker til å definere tilordningen mellom objekter og databasen. Hver jpa implementering gir sin egen motor FOR jpa merknader. JPA-spesifikasjonen gir også PersistanceManagereller EntityManager, som er de viktigste kontaktpunktene MED JPA-systemet(hvor forretningslogikkoden din forteller systemet hva de skal gjøre med de kartlagte objektene).

for å gjøre alt dette mer konkret, bør Du Vurdere Å Notere 1, som er en enkel dataklasse for modellering av en musiker.

Oppføring 1. En enkel dataklasse I Java

Musician – klassen i Oppføring 1 brukes til å holde data. Den kan inneholde primitive data som navnefeltet. Det kan også holde relasjoner til andre klasser som mainInstrument og performances.

Musiciansin grunn til å være er å inneholde data. Denne typen klasse er noen ganger kjent SOM EN DTO, eller dataoverføringsobjekt. Dtoer er et vanlig trekk ved programvareutvikling. Mens de holder mange typer data, inneholder de ikke noen forretningslogikk. Vedvarende dataobjekter er en allestedsnærværende utfordring i programvareutvikling.

data utholdenhet MED JDBC

en måte å lagre en forekomst avMusician klassen til en relasjonsdatabase ville være å bruke jdbc biblioteket. JDBC er et lag av abstraksjon som lar et program problemet SQL-kommandoer uten å tenke på den underliggende database implementering.

Oppføring 2 viser hvordan du kan fortsetteMusician klassen ved HJELP AV JDBC.

Oppføring 2. Jdbc setter inn en post

koden i Oppføring 2 er ganske selvdokumenterende. georgeHarrison – objektet kan komme fra hvor som helst (front-end send, ekstern tjeneste, etc.), og har SINE ID-og navnefelt angitt. Feltene på objektet brukes da til å levere verdiene til EN SQL insert – setning. (PreparedStatement – klassen er en DEL AV JDBC, og tilbyr en måte å trygt bruke verdier på EN SQL-spørring.)

MENS JDBC tillater kontrollen som følger med manuell konfigurasjon, er det tungvint i forhold TIL JPA. For å endre databasen må du først opprette EN SQL-spørring som tilordner Fra Java-objektet til tabellene i en relasjonsdatabase. Du må da endre SQL når en objektsignatur endres. Med JDBC blir vedlikehold AV SQL en oppgave i seg selv.

data utholdenhet MED JPA

nå vurdere Notering 3, der vi vedvarerMusician klasse ved HJELP AV JPA.

Oppføring 3. Persisting George Harrison med JPA

Musician georgeHarrison = new Musician(0, "George Harrison");musicianManager.save(georgeHarrison);

Oppføring 3 erstatter manuell SQL Fra Oppføring 2 med en enkelt linje, session.save(), som instruerer JPA til å fortsette objektet. FRA da av HÅNDTERES SQL-konverteringen av rammeverket, slik at du aldri trenger å forlate det objektorienterte paradigmet.

metadata merknader i JPA

magien i Liste 3 er resultatet av en konfigurasjon, som er opprettet ved HJELP AV JPAS merknader. Utviklere bruker merknader for å informere JPA hvilke objekter som skal vedvare, og hvordan de skal vedvare.

Oppføring 4 viserMusician – klassen med en ENKELT jpa-merknad.

Oppføring 4. Jpas @ Entity-merknad

@Entitypublic class Musician { // ..class body}

Vedvarende objekter kalles noen ganger enheter. Vedlegg@Entity til en klasse somMusician informerer JPA om at denne klassen og dens objekter skal vedvare.

Konfigurere JPA

SOM de fleste moderne rammer, OMFATTER JPA koding etter konvensjon (også kjent som konvensjon over konfigurasjon), der rammeverket gir en standardkonfigurasjon basert på beste praksis i bransjen. Som et eksempel vil en klasse kalt Musician som standard bli kartlagt til en databasetabell kalt Musiker.den konvensjonelle konfigurasjonen er en tidsbesparende, og i mange tilfeller fungerer den godt nok. Det er også mulig å tilpasse jpa konfigurasjon. Som et eksempel kan DU bruke JPAS@Table annotasjon for å angi tabellen derMusician – klassen skal lagres.

Oppføring 5. JPAS @ Tabell merknad

@Entity@Table(name="musician")public class Musician { // ..class body}

Oppføring 5 forteller JPA å fortsette enheten (Musician klassen) tilmusician tabellen.

Primærnøkkel

i JPA er primærnøkkelen feltet som brukes til å identifisere hvert objekt unikt i databasen. Primærnøkkelen er nyttig for å referere og knytte objekter til andre enheter. Når du lagrer et objekt i en tabell, angir du også feltet som skal brukes som primærnøkkel.

I Oppføring 6 forteller VI JPA hvilket felt som skal brukes somMusician‘s primærnøkkel.

Oppføring 6. Angi primærnøkkelen

@Entitypublic class Musician { @Id private Long id;

I dette tilfellet har VI brukt JPAS@Id merknad for å angiid – feltet somMusician‘s primærnøkkel. Som standard antar denne konfigurasjonen at primærnøkkelen vil bli satt av databasen-for eksempel når feltet er satt til automatisk økning i tabellen.

JPA støtter andre strategier for å generere et objekts primærnøkkel. Det har også merknader for å endre individuelle feltnavn. GENERELT ER JPA fleksibel nok til å tilpasse seg enhver utholdenhetskartlegging du måtte trenge.

CRUD operations

Når du har tilordnet en klasse til en databasetabell og opprettet primærnøkkelen, har du alt du trenger for å opprette, hente, slette og oppdatere den klassen i databasen. Kall session.save() vil opprette eller oppdatere den angitte klassen, avhengig av om primærnøkkelfeltet er null eller gjelder for en eksisterende enhet. Kall entityManager.remove() vil slette den angitte klassen.

Enhetsrelasjoner i JPA

bare å fortsette et objekt med et primitivt felt er bare halvparten av ligningen. JPA har også evnen til å administrere enheter i forhold til hverandre. Fire typer enhetsrelasjoner er mulige i både tabeller og objekter:

    1. En-til-mange
    2. Mange-til-mange
    3. En-til-en

hver type forhold beskriver hvordan en enhet forholder seg til andre enheter. For eksempel kanMusician-enheten ha en en-til-mange-relasjon med Performance, en enhet representert av en samling som List eller Set.

hvisMusician inkluderte etBand – feltet, kan forholdet mellom disse enhetene være mange-til-en, noe som innebærer samling av Musicians på singelenBand klasse. (Forutsatt at hver musiker bare utfører i et enkelt band.)

hvisMusician inkluderte etBandMates felt, som kan representere et mange-til-mange-forhold med andreMusician enheter.

EndeligMusician kan ha et en-til-en-forhold med en Quote enhet, som brukes til å representere et berømt sitat: Quote famousQuote = new Quote().

Definere relasjonstyper

JPA har merknader for hver av sine relasjonstyper. Oppføring 7 viser hvordan du kan annotere en-til-mange-forholdet mellom Musician og Performances.

Oppføring 7. Annotere et en-til-mange forhold

en ting å legge merke til er at @JoinColumn forteller JPA hvilken kolonne på Ytelsestabellen vil kartlegge tilMusician – enheten. Hver ytelse vil være knyttet til en enkelt Musician, som spores av denne kolonnen. Når JPA laster inn en Musician eller en Performance i databasen, vil den bruke denne informasjonen til å rekonstituere objektgrafen.

Henter strategier i JPA

I tillegg til å vite hvor du skal plassere relaterte enheter i databasen, MÅ JPA vite hvordan du vil ha dem lastet. Hentestrategier forteller JPA hvordan du laster relaterte enheter. Når du laster inn og lagrer objekter, må ET JPA-rammeverk gi muligheten til å finjustere hvordan objektgrafer håndteres. For eksempel, hvisMusician klassen har etbandMate felt (som vist i Liste 7), kan lastinggeorge føre til at Hele Musikerbordet lastes fra databasen!

det som trengs er evnen til å definere lat lasting av relaterte enheter-erkjenner, selvfølgelig, at relasjoner I JPA kan være ivrige eller late. DU kan bruke merknader til å tilpasse hentestrategiene dine, men JPAS standardkonfigurasjon fungerer ofte ut av boksen, uten endringer:

  1. En-til-mange: Lat
  2. Mange-til-mange: Ivrige
  3. En-til-mange: Late
  4. En-til-en: Ivrige

jpa installasjon og oppsett

vi avslutter med en rask titt på installasjon OG oppsett AV JPA for dine java-applikasjoner. For denne demonstrasjonen bruker Jeg EclipseLink, jpa reference-implementeringen.

den vanlige måten å installere JPA på er å inkludere en jpa-leverandør i prosjektet. Oppføring 8 viser hvordan Du vil inkludere EclipseLink som en avhengighet i Din Mavenpom.xml fil.

Oppføring 8. Inkluder EclipseLink som En maven-avhengighet

org.eclipse.persistenceeclipselink2.5.0-RC1

Du må også inkludere driveren for databasen din, som vist i Liste 9.

Oppføring 9. Maven avhengighet For En MySql-kontakt

mysqlmysql-connector-java5.1.32

Deretter må du fortelle systemet om databasen og leverandøren. Dette gjøres ipersistence.xml – filen, som vist i Oppføring 10.

Oppføring 10. Utholdenhet.xml

det finnes andre måter å gi denne informasjonen til systemet, inkludert programmatisk. Jeg anbefaler at du bruker filenpersistence.xml fordi lagring av avhengigheter på denne måten gjør det veldig enkelt å oppdatere programmet uten å endre kode.

Spring konfigurasjon for JPA

Bruke Våren vil i stor grad lette integrasjonen AV JPA i søknaden din. Som et eksempel, plassere@SpringBootApplication annotasjonen i programhodet instruerer Våren til automatisk å skanne etter klasser og injisere EntityManager etter behov, basert på konfigurasjonen du har angitt.Oppføring 11 viser avhengighetene som skal inkluderes hvis Du vil Ha Vårens JPA-støtte for søknaden din.

Oppføring 11. Legge Til Spring jpa-støtte I Maven

Konklusjon

Hvert program som omhandler en database, bør definere et applikasjonslag hvis eneste formål er å isolere utholdenhetskode. Som du har sett i denne artikkelen, Introduserer Java Persistence API en rekke evner og støtte For Java object persistence. Enkle programmer kan ikke kreve alle JPA evner, og i noen tilfeller overhead for å konfigurere rammeverket kan ikke være fortjent. Som et program vokser, derimot, JPA struktur og innkapsling virkelig tjene deres holde. Bruke JPA holder objektkoden enkel og gir et konvensjonelt rammeverk for tilgang til data I Java-programmer.

Lær mer om Java Persistence API og relaterte teknologier

  • Hva ER JDBC? Introduksjon Til Java Database Connectivity: Bli kjent Med Java lavnivå API for å koble til en database, utstede SQL-spørringer, og mer.Java utholdenhet MED JPA Og Hibernate, Del 1: Enheter og relasjoner: Kom i gang modellering enheter og relasjoner Med Java 8 Og Hibernate ORM.
  • Java utholdenhet MED JPA og Hibernate, Del 2: Hands-on praksis modellering mange-til-mange relasjoner og arv relasjoner I Java 8 OG Hibernate ORM.Implementering av tilstandsavhengig oppførsel: en klassisk introduksjon til Tilstandsmønsteret og tilstandsavhengigheten I Java.Ivrig / Lat Lasting I Dvalemodus: hvordan søke ivrig og lat lasting i Dvalemodus.JPA 2.2 bringer noen etterlengtede endringer: en oversikt over spesifikasjonsoppdateringer I JPA 2.2, inkludert forbedringer AV CDI, bedre justering Med Dato OG KLOKKESLETT API, og støtte for @Repeatable merknader.
  • Skal DU bruke JPA til ditt neste prosjekt?: Viktige spørsmål som kan hjelpe deg med å bestemme.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *