logo

Spring Boot JPA

Hva er JPA?

Spring Boot JPA er en Java-spesifikasjon for administrasjon relasjonelle data i Java-applikasjoner. Den lar oss få tilgang til og vedvare data mellom Java-objekt/-klasse og relasjonsdatabase. JPA følger etter Objekt-relasjonskartlegging (ORM). Det er et sett med grensesnitt. Det gir også en kjøretid EntityManager API for behandling av spørringer og transaksjoner på objektene mot databasen. Den bruker et plattformuavhengig objektorientert spørringsspråk JPQL (Java Persistent Query Language).

I sammenheng med utholdenhet dekker det tre områder:

  • Java Persistence API
  • Objekt-relasjonellmetadata
  • Selve API-en, definert i standhaftighet pakke

JPA er ikke et rammeverk. Den definerer et konsept som kan implementeres av ethvert rammeverk.

Hvorfor skal vi bruke JPA?

JPA er enklere, renere og mindre arbeidskrevende enn JDBC, SQL og håndskrevet kartlegging. JPA er egnet for ikke-ytelsesorienterte komplekse applikasjoner. Den største fordelen med JPA fremfor JDBC er at i JPA er data representert av objekter og klasser mens data i JDBC er representert av tabeller og poster. Den bruker POJO for å representere vedvarende data som forenkler databaseprogrammering. Det er noen andre fordeler med JPA:

  • JPA unngår å skrive DDL på en databasespesifikk dialekt av SQL. I stedet for dette tillater den kartlegging i XML eller bruk av Java-merknader.
  • JPA lar oss unngå å skrive DML på den databasespesifikke dialekten til SQL.
  • JPA lar oss lagre og laste Java-objekter og grafer uten noe DML-språk i det hele tatt.
  • Når vi trenger å utføre spørringer JPQL, lar det oss uttrykke spørringene i form av Java-enheter i stedet for den (native) SQL-tabellen og -kolonner.

JPA-funksjoner

Det er følgende funksjoner i JPA:

  • Det er et kraftig depot og tilpasset objektkartleggingsabstraksjon.
  • Den støtter for utholdenhet på tvers av butikker . Det betyr at en enhet delvis kan lagres i MySQL og Neo4j (Graph Database Management System).
  • Den genererer dynamisk spørringer fra spørringsmetoders navn.
  • Domenebaseklassene gir grunnleggende egenskaper.
  • Den støtter transparent revisjon.
  • Mulighet for å integrere tilpasset depotkode.
  • Det er enkelt å integrere med Spring Framework med det tilpassede navneområdet.

JPA arkitektur

JPA er en kilde for å lagre forretningsenheter som relasjonsenheter. Den viser hvordan du definerer en POJO som en enhet og hvordan du administrerer enheter med relasjon.

Følgende figur beskriver klassenivåarkitekturen til JPA som beskriver kjerneklassene og grensesnittene til JPA som er definert i javax utholdenhet pakke. JPA-arkitekturen inneholder følgende enheter:

java programmer
    Standhaftighet:Det er en klasse som inneholder statiske metoder for å skaffe en EntityManagerFactory-forekomst.EntityManagerFactory:Det er en fabrikkklasse av EntityManager. Den oppretter og administrerer flere forekomster av EntityManager.Entity Manager:Det er et grensesnitt. Den kontrollerer utholdenhetsoperasjonene på objekter. Det fungerer for Query-forekomsten.Entitet:Entitetene er persistensobjektene lagrer som en post i databasen.Utholdenhetsenhet:Den definerer et sett med alle enhetsklasser. I en applikasjon administrerer EntityManager-forekomster den. Settet med enhetsklasser representerer dataene i et enkelt datalager.Entitetstransaksjon:Den har en en-til-en forhold til EntityManager-klassen. For hver EntityManager vedlikeholdes operasjoner av EntityTransaction-klassen.Spørsmål:Det er et grensesnitt som implementeres av hver JPA-leverandør for å skaffe relasjonsobjekter som oppfyller kriteriene.
Spring Boot jpa

JPA klasseforhold

Klassene og grensesnittene som vi har diskutert ovenfor opprettholder et forhold. Følgende figur viser forholdet mellom klasser og grensesnitt.

Spring Boot jpa
  • Forholdet mellom EntityManager og EntiyTransaction er en-til-en . Det er en EntityTransaction-forekomst for hver EntityManager-operasjon.
  • Forholdet mellom EntityManageFactory og EntiyManager er en-til-mange . Det er en fabrikkklasse til EntityManager-forekomst.
  • Forholdet mellom EntityManager og Query er en-til-mange . Vi kan utføre et hvilket som helst antall spørringer ved å bruke en forekomst av EntityManager-klassen.
  • Forholdet mellom EntityManager og Entity er en-til-mange . En EntityManager-forekomst kan administrere flere Entities.

JPA-implementeringer

JPA er en åpen kildekode API. Det er ulike bedriftsleverandører som Eclipse, RedHat, Oracle, etc. som tilbyr nye produkter ved å legge til JPA i dem. Det er noen populære JPA-implementeringsrammer som f.eks Hibernate, EclipseLink, DataNucleus, osv. Det er også kjent som Objekt-relasjonskartlegging (ORM) verktøy.

Objektrelasjonskartlegging (ORM)

I ORM kalles kartleggingen av Java-objekter til databasetabeller, og omvendt Objekt-relasjonell kartlegging. ORM-kartleggingen fungerer som en bro mellom en relasjonsdatabase (tabeller og poster) og Java-applikasjon (klasser og objekter).

I den følgende figuren er ORM-laget et adapterlag. Den tilpasser språket til objektgrafer til språket til SQL og relasjonstabeller.

Spring Boot jpa

ORM-laget eksisterer mellom applikasjonen og databasen. Den konverterer Java-klassene og -objektene slik at de kan lagres og administreres i en relasjonsdatabase. Som standard blir navnet som vedvarer navnet på tabellen, og felt blir kolonner. Når en applikasjon er konfigurert, tilsvarer hver tabellrad et objekt.

JPA-versjoner

Tidligere versjoner av EJB definerer utholdenhetslaget kombinert med forretningslogikklaget som bruker javax.ejb.EntityBean Grensesnitt. EJB-spesifikasjonen inkluderer definisjonen av JPA.

Mens EJB 3.0 ble introdusert, ble persistenslaget separert og spesifisert som JPA 1.0 (Java Persistence API). Spesifikasjonene til denne API-en ble utgitt sammen med spesifikasjonene til JAVA EE5 11. mai 2006, ved bruk av JSR 220.

I 2019 ble JPA omdøpt til Jakarta utholdenhet . Den siste versjonen av JPA er 2.2 . Den støtter følgende funksjoner:

  • Java 8, data og tid API
  • CDI-injeksjon i AttributeConvertes
  • Den lager merknader @Repeterbare

Forskjellen mellom JPA og Hibernate

JPA: JPA er en Java-spesifikasjon som brukes til å få tilgang til, administrere og vedvare data mellom Java-objekt og relasjonsdatabase. Det er en standard tilnærming for ORM.

Dvalemodus: Det er et lett, åpen kildekode ORM-verktøy som brukes til å lagre Java-objekter i relasjonsdatabasesystemet. Det er en leverandør av JPA. Den følger en felles tilnærming levert av JPA.

Tabellen nedenfor beskriver forskjellene mellom JPA og Hibernate.

JPA Gå i dvale
JPA er en Java-spesifikasjon for kartlegging av relasjonsdata i Java-applikasjon. Hibernate er en ORM rammeverk som omhandler datapersistens.
JPA tilbyr ingen implementeringsklasser. Det gir implementeringsklasser.
Den bruker plattformuavhengig spørringsspråk kalt JPQL (Java Persistence Query Language). Den bruker sitt eget spørringsspråk kalt HQL (Hibernate Query Language).
Det er definert i javax.persistence pakke. Det er definert i org.dvale pakke.
Det er implementert i ulike ORM-verktøy som Hibernate, EclipseLink, etc. Hibernate er forsørger av PSD.
JPA bruker EntityManager for å håndtere vedvarende data. I dvalemodus brukes Økt for å håndtere vedvarende data.

Spring Boot Starter Data JPA

Spring Boot gir starteravhengighet spring-boot-starter-data-jpa å koble Spring Boot-applikasjonen med relasjonsdatabasen effektivt. Spring-boot-starter-data-jpa bruker internt spring-boot-jpa-avhengigheten.

 org.springframework.boot spring-boot-starter-data-jpa 2.2.2.RELEASE 

Spring Boot JPA Eksempel

La oss lage en Spring Boot-applikasjon som bruker JPA for å koble til databasen. I følgende eksempel har vi brukt en minnedatabase Apache Derby.

Apache Derby: Det er en åpen kildekode, innebygd relasjonsdatabase implementert utelukkende i Java. Den er tilgjengelig under Apache License 2.0. Det er følgende fordeler med Apache Derby:

  • Det er enkelt å installere, distribuere og bruke.
  • Den er basert på Java-, JDBC- og SQL-standarder.
  • Den gir en innebygd JDBC-driver som lar oss bygge inn Derby i enhver Java-basert løsning.
  • Den støtter også klient/server-modus med Derby Network Client JDBC-driveren og Derby Network Server.

Spring Boot kan automatisk konfigurere en innebygd database som f.eks H2, HSQL, og Derbydatabaser . Vi trenger ikke å oppgi noen tilkoblings-URLer. Vi trenger bare å inkludere en byggeavhengighet på den innebygde databasen vi ønsker å bruke.

I Spring Boot kan vi enkelt integrere Apache Derby-databasen bare ved å legge til Derby avhengighet i filen pom.xml.

 org.apache.derby derby runtime 

Trinn 1: Open Spring Initializr https://start.spring.io/ .

Steg 2: Velg den nyeste versjonen av Spring Boot 2.3.0 (SNAPSHOT)

azurblå abonnement

Trinn 3: Gi Gruppe Navn. Vi har gitt com.javatpoint.

Trinn 4: Gi Gjenstand ID. Vi har gitt apache-derby-eksempel .

Trinn 5: Legg til avhengighetene: Spring Web, Spring Data JPA, og Apache Derby Database .

Trinn 6: Klikk på generere knapp. Når vi klikker på Generer-knappen, pakker den inn prosjektet i en Jar-fil og laster den ned til det lokale systemet.

Spring Boot jpa

Trinn 7: Pakk ut Jar-filen og lim den inn i STS-arbeidsområdet.

Trinn 8: Importer prosjektmappen til STS.

Fil -> Importer -> Eksisterende Maven-prosjekter -> Bla gjennom -> Velg mappen apache-derby-eksempel -> Fullfør

Det tar litt tid å importere.

Trinn 9: Lag en pakke med navnet com.javatpoint.model i mappen src/main/java.

Trinn 10: Lag en klasse med navnet UserRecord i pakken com.javatpoint.model og gjør følgende:

  • Definer tre variabler id, navn, og e-post .
  • Generer Getters og Setter.
    Høyreklikk på filen -> Kilde -> Generer Getters and Setters
  • Definer en standard konstruktør.
  • Merk klassen som en Entitet ved å bruke merknaden @Entitet.
  • merke ID som primærnøkkel ved å bruke merknaden @Id.

UserRecord.java

 package com.javatpoint.model; import javax.persistence.Entity; import javax.persistence.Id; @Entity public class UserRecord { @Id private int id; private String name; private String email; //default conatructor public UserRecord() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } } 

Trinn 11: Lag en pakke med navnet com.javatpoint.controller i mappen src/main/java.

Trinn 12: Opprett en Controller-klasse med navnet Brukerkontroller i pakken com.javatpoint.controller og gjør følgende:

  • Merk klassen som en kontroller ved å bruke merknaden @RestController.
  • Autowired klassen Brukerservice ved å bruke merknaden @Autowired .
  • Vi har definert to kartlegginger, en for få alle brukere og den andre for add-user.

UserController.java

 package com.javatpoint.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import com.javatpoint.model.UserRecord; import com.javatpoint.service.UserService; import java.util.List; @RestController public class UserController { @Autowired private UserService userService; @RequestMapping('/') public List getAllUser() { return userService.getAllUsers(); } @RequestMapping(value='/add-user', method=RequestMethod.POST) public void addUser(@RequestBody UserRecord userRecord) { userService.addUser(userRecord); } } 

Trinn 13: Lag en pakke med navnet com.javatpoint.service i mappen src/main/java.

Trinn 14: Opprett en tjenesteklasse med navnet Brukerservice i pakken com.javatpoint.service og gjør følgende:

  • Merk klassen som tjeneste ved å bruke merknaden @Service.
  • Kablet automatisk UserRepository
  • Definer en metode getAllUsers() som returnerer en liste over
  • Definer et annet metodenavn addUser() som lagrer brukeroppføringen.

UserService.java

 package com.javatpoint.service; import java.util.List; import java.util.ArrayList; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.javatpoint.model.UserRecord; import com.javatpoint.repository.UserRepository; @Service public class UserService { @Autowired private UserRepository userRepository; public List getAllUsers() { ListuserRecords = new ArrayList(); userRepository.findAll().forEach(userRecords::add); return userRecords; } public void addUser(UserRecord userRecord) { userRepository.save(userRecord); } } 

Trinn 15: Lag en pakke med navnet com.javatpoint.repository i mappen src/main/java.

Trinn 16: Lag et depotgrensesnitt med navnet UserRepository i pakken com.javatpoint.repository og strekker seg CrudRepository .

nettverksoperativsystem

UserRepository.java

 package com.javatpoint.repository; import org.springframework.data.repository.CrudRepository; import com.javatpoint.model.UserRecord; public interface UserRepository extends CrudRepository { } 

Trinn 17: Nå åpner du ApacheDerbyExampleApplication.java fil. Den opprettes som standard når vi konfigurerer en applikasjon.

ApacheDerbyExampleApplication.java

 package com.javatpoint; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class ApacheDerbyExampleApplication { public static void main(String[] args) { SpringApplication.run(ApacheDerbyExampleApplication.class, args); } } 

Nå har vi satt opp alle nødvendige klasser og pakker i henhold til kravene. Legg merke til at vi ikke har gitt noen tilkoblings-URL for databasen. Etter å ha fullført alle trinnene ovenfor, ser prosjektkatalogen slik ut:

Spring Boot jpa

La oss kjøre programmet.

Trinn 18: Åpne ApacheDerbyExampleApplication.java fil og kjør den som Java-applikasjon.

Trinn 19: Åpne nettleseren og start URLen http://localhost:8080/. Den returnerer en tom liste fordi vi ikke har lagt til noen brukere i listen.

For å legge til en bruker i databasen sender vi en POST forespørsel ved å bruke Postbud .

Trinn 20: Åpne Postbud og gjør følgende:

  • Velg POST
  • Påkall nettadressen http://localhost:8080/add-user.
  • Klikk på Kropp
  • Velg Innholdstype som JSON (applikasjon/json).
  • Sett inn dataene som skal settes inn i databasen. Vi har lagt inn følgende data:
 { 'id': '001', 'name': 'Tom', 'email': '[email protected]' } 
  • Klikk på Sende knapp.
Spring Boot jpa

Når vi klikker på Send-knappen, vises det Status: 200 OK . Det betyr at forespørselen har blitt utført.

Trinn 21: Åpne nettleseren og start URLen http://localhost:8080. Den returnerer brukeren som vi har satt inn i databasen.

Spring Boot jpa
Last ned Apache derby eksempelprosjekt