Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Legg til Databasen i Applikasjonen Vår | Arbeide med Databaser
Spring Boot Backend

bookLegg til Databasen i Applikasjonen Vår

I forrige kapittel gikk vi gjennom hva JPA og Hibernate er. I dette kapitlet skal vi integrere en database i vår applikasjon og prøve å utføre CRUD-operasjoner (Create, Read, Update, Delete).

Eksempel på arbeid med en database:

Tilpasning av modell

Det første vi må gjøre er å annotere modellen slik at Hibernate kan arbeide med den og forstå hvilken tabell den tilhører.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

I @Entity(name = "books")-annotasjonen lar name-parameteren deg angi navnetentiteten, som standard er navnet på klassen.

@Table-annotasjonen brukes for å angi spesifikke innstillinger for tabellen som er tilknyttet entiteten.

I vårt tilfelle blir denne tabellen opprettet gjennom migrasjoner, så vi trenger ikke å opprette den manuelt.

Vi trenger også at vår entitet automatisk genererer en ID for å tildele den en unik verdi i databasen. For å oppnå dette kan vi bruke @Id-annotasjonen på feltet som representerer vår ID, sammen med @GeneratedValue-annotasjonen.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

Annotasjonene @Id og @GeneratedValue(strategy = GenerationType.UUID) angir at id-feltet er en primærnøkkel som automatisk genereres i UUID-format.

Dette sikrer unike strengidentifikatorer for hver post i tabellen, noe som er fordelaktig for distribuerte systemer og garanterer global unikhet for identifikatorene. UUID lagres som strenger.

Legge til Repository

For øyeblikket simulerer vårt repository en database ved å lagre alle enheter i en List. Men hva om jeg fortalte deg at det faktisk er mye enklere å bruke en ekte database!

For å samhandle med en ekte database, kan vi bruke JpaRepository-grensesnittet, som tilbyr et bredt utvalg av innebygde metoder for å arbeide med data.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

I JpaRepository<Book, String> angir vi to parametere: Book, som representerer entitetstypen som repositoryen skal arbeide med, og String, som er datatypen til primærnøkkelen (ID) for Book-entiteten.

Og det er alt vi trenger! Nå har vi et fullt funksjonelt repository!

Hovedmetoder i JpaRepository

Opprette egendefinerte SQL-spørringer

Spring Data JPA kan automatisk generere spørringer dersom metoden er navngitt etter et mønster som samsvarer med datastrukturen. Dette gjøres ved å bruke spesifikke nøkkelord som angir hvordan spørringen skal konstrueres.

Kort sammendrag av videoen

List<Book> findBookByAuthor(String author);

Denne metoden genererer automatisk en SQL-spørring som søker etter alle bøker av den spesifiserte author. Den genererte spørringen vil se slik ut:

SELECT * FROM book WHERE author = ?;

Hvordan det fungerer

Metodenavnet findBookByAuthor(String author) er konstruert på følgende måte: det starter med prefikset findBook, som indikerer at metoden utfører et søk. Deretter kommer ByAuthor, som representerer feltet i Book-entiteten som skal brukes for søket.

Når denne metoden kalles, vil Spring Data JPA automatisk generere en spørring som søker etter poster der author-feltet samsvarer med den oppgitte parameteren.

Generering av SQL-spørringer med @Query

@Query-annotasjonen i Spring Data JPA gir mulighet til å bruke både JPQL og native SQL, noe som gir fleksibilitet i valget av riktig tilnærming.

JPQL

JPQL (Java Persistence Query Language) arbeider med objekter og deres egenskaper.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Denne spørringen søker etter alle Book objekter hvor feltet author matcher den oppgitte verdien. JPQL er mer abstrakt og gjenspeiler datastrukturmodellen.

Native SQL

Native SQL kommuniserer direkte med databasetabeller.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

I dette tilfellet opererer spørringen på book-tabellen, noe som muliggjør bruk av spesifikke SQL-funksjoner og optimaliseringer.

Velge en tilnærming

Hvis du trenger en enkel spørring som samsvarer med datamodellen, bruk JPQL. Hvis det kreves en kompleks spørring eller databasespesifikke funksjoner, velg native SQL.

Dermed gir @Query fleksibilitet til å enkelt bytte mellom de to tilnærmingene basert på behov.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 5

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Suggested prompts:

Can you explain the difference between JPQL and native SQL in more detail?

How do I create a custom query using the @Query annotation?

What are some best practices for naming repository methods in Spring Data JPA?

Awesome!

Completion rate improved to 3.45

bookLegg til Databasen i Applikasjonen Vår

Sveip for å vise menyen

I forrige kapittel gikk vi gjennom hva JPA og Hibernate er. I dette kapitlet skal vi integrere en database i vår applikasjon og prøve å utføre CRUD-operasjoner (Create, Read, Update, Delete).

Eksempel på arbeid med en database:

Tilpasning av modell

Det første vi må gjøre er å annotere modellen slik at Hibernate kan arbeide med den og forstå hvilken tabell den tilhører.

Book.java

Book.java

copy
12345678910
@Getter @Setter @Entity(name = "book") @Table(name = "book") public class Book { private String id; private String name; private String author; private String price; }

I @Entity(name = "books")-annotasjonen lar name-parameteren deg angi navnetentiteten, som standard er navnet på klassen.

@Table-annotasjonen brukes for å angi spesifikke innstillinger for tabellen som er tilknyttet entiteten.

I vårt tilfelle blir denne tabellen opprettet gjennom migrasjoner, så vi trenger ikke å opprette den manuelt.

Vi trenger også at vår entitet automatisk genererer en ID for å tildele den en unik verdi i databasen. For å oppnå dette kan vi bruke @Id-annotasjonen på feltet som representerer vår ID, sammen med @GeneratedValue-annotasjonen.

@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;

Annotasjonene @Id og @GeneratedValue(strategy = GenerationType.UUID) angir at id-feltet er en primærnøkkel som automatisk genereres i UUID-format.

Dette sikrer unike strengidentifikatorer for hver post i tabellen, noe som er fordelaktig for distribuerte systemer og garanterer global unikhet for identifikatorene. UUID lagres som strenger.

Legge til Repository

For øyeblikket simulerer vårt repository en database ved å lagre alle enheter i en List. Men hva om jeg fortalte deg at det faktisk er mye enklere å bruke en ekte database!

For å samhandle med en ekte database, kan vi bruke JpaRepository-grensesnittet, som tilbyr et bredt utvalg av innebygde metoder for å arbeide med data.

BookRepository.java

BookRepository.java

copy
1234
@Repository public interface BookRepository extends JpaRepository<Book, String> { // JpaRepository already provides methods for CRUD operations }

I JpaRepository<Book, String> angir vi to parametere: Book, som representerer entitetstypen som repositoryen skal arbeide med, og String, som er datatypen til primærnøkkelen (ID) for Book-entiteten.

Og det er alt vi trenger! Nå har vi et fullt funksjonelt repository!

Hovedmetoder i JpaRepository

Opprette egendefinerte SQL-spørringer

Spring Data JPA kan automatisk generere spørringer dersom metoden er navngitt etter et mønster som samsvarer med datastrukturen. Dette gjøres ved å bruke spesifikke nøkkelord som angir hvordan spørringen skal konstrueres.

Kort sammendrag av videoen

List<Book> findBookByAuthor(String author);

Denne metoden genererer automatisk en SQL-spørring som søker etter alle bøker av den spesifiserte author. Den genererte spørringen vil se slik ut:

SELECT * FROM book WHERE author = ?;

Hvordan det fungerer

Metodenavnet findBookByAuthor(String author) er konstruert på følgende måte: det starter med prefikset findBook, som indikerer at metoden utfører et søk. Deretter kommer ByAuthor, som representerer feltet i Book-entiteten som skal brukes for søket.

Når denne metoden kalles, vil Spring Data JPA automatisk generere en spørring som søker etter poster der author-feltet samsvarer med den oppgitte parameteren.

Generering av SQL-spørringer med @Query

@Query-annotasjonen i Spring Data JPA gir mulighet til å bruke både JPQL og native SQL, noe som gir fleksibilitet i valget av riktig tilnærming.

JPQL

JPQL (Java Persistence Query Language) arbeider med objekter og deres egenskaper.

@Query("SELECT b FROM book b WHERE b.author = :author")
List<Book> findBookByAuthor(String author);

Denne spørringen søker etter alle Book objekter hvor feltet author matcher den oppgitte verdien. JPQL er mer abstrakt og gjenspeiler datastrukturmodellen.

Native SQL

Native SQL kommuniserer direkte med databasetabeller.

@Query(value = "SELECT * FROM books WHERE author = :author", nativeQuery = true)
List<Book> findBookByAuthor(String author);

I dette tilfellet opererer spørringen på book-tabellen, noe som muliggjør bruk av spesifikke SQL-funksjoner og optimaliseringer.

Velge en tilnærming

Hvis du trenger en enkel spørring som samsvarer med datamodellen, bruk JPQL. Hvis det kreves en kompleks spørring eller databasespesifikke funksjoner, velg native SQL.

Dermed gir @Query fleksibilitet til å enkelt bytte mellom de to tilnærmingene basert på behov.

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 5
some-alt