Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Lisää Tietokanta Sovellukseemme | Työskentely Tietokantojen Kanssa
Spring Boot Backend

bookLisää Tietokanta Sovellukseemme

Edellisessä luvussa käsittelimme, mitä JPA ja Hibernate ovat. Tässä luvussa liitämme tietokannan sovellukseemme ja kokeilemme suorittaa CRUD-operaatioita (Luo, Lue, Päivitä, Poista).

Esimerkki tietokannan kanssa työskentelystä:

Mallin mukauttaminen

Ensimmäinen asia, joka tulee tehdä, on merkitä malli niin, että Hibernate voi käsitellä sitä ja ymmärtää, mihin tauluun se kuuluu.

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; }

@Entity(name = "books") annotaatiossa name-parametri mahdollistaa entiteetin nimen määrittämisen, joka oletuksena on luokan nimi.

@Table-annotaatiota käytetään määrittämään tietyt asetukset entiteettiin liittyvälle taululle.

Tässä tapauksessa tämä taulu luodaan migraatioiden avulla, joten sitä ei tarvitse luoda manuaalisesti.

Tarvitsemme myös, että entity luo ID:n automaattisesti ja antaa sille yksilöllisen arvon tietokannassa. Tämän saavuttamiseksi voidaan käyttää kentän kohdalla, joka edustaa ID:tä, @Id annotaatiota yhdessä @GeneratedValue annotaation kanssa.

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

Annotaatiot @Id ja @GeneratedValue(strategy = GenerationType.UUID) määrittävät, että id-kenttä on ensisijainen avain, joka luodaan automaattisesti UUID-muodossa.

Tämä varmistaa yksilölliset merkkijonotunnisteet jokaiselle tietueelle taulussa, mikä on hyödyllistä hajautetuissa järjestelmissä ja takaa tunnisteiden globaalin yksilöllisyyden. UUID:t tallennetaan merkkijonoina.

Repositorion lisääminen

Tällä hetkellä tietovarastomme simuloi tietokantaa tallentamalla kaikki entiteetit List-rakenteeseen. Mutta entä jos kertoisin, että oikean tietokannan käyttäminen on itse asiassa paljon helpompaa!

Voimme kommunikoida oikean tietokannan kanssa käyttämällä JpaRepository-rajapintaa, joka tarjoaa laajan valikoiman sisäänrakennettuja metodeja datan käsittelyyn.

BookRepository.java

BookRepository.java

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

Luokassa JpaRepository<Book, String> annetaan kaksi parametria: Book, joka edustaa entiteettityyppiä, jonka kanssa repository toimii, sekä String, joka on Book-entiteetin primääriavaimen (ID) tietotyyppi.

Ja siinä kaikki! Nyt meillä on täysin toimiva repository!

JpaRepositoryn päämetodit

Mukautettujen SQL-kyselyiden luominen

Spring Data JPA voi automaattisesti luoda kyselyitä, jos metodin nimi noudattaa kaavaa, joka vastaa tietorakennetta. Tämä tapahtuu käyttämällä erityisiä avainsanoja, jotka määrittävät, miten kysely tulee muodostaa.

Videon lyhyt yhteenveto

List<Book> findBookByAuthor(String author);

Tämä metodi luo automaattisesti SQL-kyselyn, joka etsii kaikki kirjat määritellyn author-kentän perusteella. Luotu kysely näyttää tältä:

SELECT * FROM book WHERE author = ?;

Miten se toimii

Metodin nimi findBookByAuthor(String author) on muodostettu seuraavasti: se alkaa etuliitteellä findBook, mikä osoittaa, että metodi suorittaa haun. Seuraavaksi tulee ByAuthor, joka viittaa Book-entiteetin kenttään, jota käytetään haussa.

Kun tämä metodi kutsutaan, Spring Data JPA generoi automaattisesti kyselyn, joka etsii tietueita, joissa author-kenttä vastaa annettua parametria.

SQL-kyselyiden generointi @Query-annotaatiolla

@Query-annotaatio Spring Data JPA:ssa mahdollistaa sekä JPQL- että natiivien SQL-kyselyiden käytön, tarjoten joustavuutta sopivan lähestymistavan valintaan.

JPQL

JPQL (Java Persistence Query Language) toimii olioiden ja niiden ominaisuuksien kanssa.

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

Tämä kysely hakee kaikki Book oliot, joiden author kenttä vastaa annettua arvoa. JPQL on abstraktimpi ja heijastaa tietomallin rakennetta.

Native SQL

Native SQL on suora yhteys tietokantatauluihin.

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

Tässä tapauksessa kysely kohdistuu book tauluun, mahdollistaen tiettyjen SQL-funktioiden ja optimointien käytön.

Lähestymistavan valinta

Jos tarvitset yksinkertaisen kyselyn, joka vastaa tietomallia, käytä JPQL:ää. Jos tarvitset monimutkaisen kyselyn tai tietokantakohtaisia toimintoja, valitse native SQL.

Näin ollen @Query tarjoaa joustavuutta ja mahdollistaa helpon vaihtamisen näiden kahden lähestymistavan välillä tarpeidesi mukaan.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 5

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Awesome!

Completion rate improved to 3.45

bookLisää Tietokanta Sovellukseemme

Pyyhkäise näyttääksesi valikon

Edellisessä luvussa käsittelimme, mitä JPA ja Hibernate ovat. Tässä luvussa liitämme tietokannan sovellukseemme ja kokeilemme suorittaa CRUD-operaatioita (Luo, Lue, Päivitä, Poista).

Esimerkki tietokannan kanssa työskentelystä:

Mallin mukauttaminen

Ensimmäinen asia, joka tulee tehdä, on merkitä malli niin, että Hibernate voi käsitellä sitä ja ymmärtää, mihin tauluun se kuuluu.

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; }

@Entity(name = "books") annotaatiossa name-parametri mahdollistaa entiteetin nimen määrittämisen, joka oletuksena on luokan nimi.

@Table-annotaatiota käytetään määrittämään tietyt asetukset entiteettiin liittyvälle taululle.

Tässä tapauksessa tämä taulu luodaan migraatioiden avulla, joten sitä ei tarvitse luoda manuaalisesti.

Tarvitsemme myös, että entity luo ID:n automaattisesti ja antaa sille yksilöllisen arvon tietokannassa. Tämän saavuttamiseksi voidaan käyttää kentän kohdalla, joka edustaa ID:tä, @Id annotaatiota yhdessä @GeneratedValue annotaation kanssa.

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

Annotaatiot @Id ja @GeneratedValue(strategy = GenerationType.UUID) määrittävät, että id-kenttä on ensisijainen avain, joka luodaan automaattisesti UUID-muodossa.

Tämä varmistaa yksilölliset merkkijonotunnisteet jokaiselle tietueelle taulussa, mikä on hyödyllistä hajautetuissa järjestelmissä ja takaa tunnisteiden globaalin yksilöllisyyden. UUID:t tallennetaan merkkijonoina.

Repositorion lisääminen

Tällä hetkellä tietovarastomme simuloi tietokantaa tallentamalla kaikki entiteetit List-rakenteeseen. Mutta entä jos kertoisin, että oikean tietokannan käyttäminen on itse asiassa paljon helpompaa!

Voimme kommunikoida oikean tietokannan kanssa käyttämällä JpaRepository-rajapintaa, joka tarjoaa laajan valikoiman sisäänrakennettuja metodeja datan käsittelyyn.

BookRepository.java

BookRepository.java

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

Luokassa JpaRepository<Book, String> annetaan kaksi parametria: Book, joka edustaa entiteettityyppiä, jonka kanssa repository toimii, sekä String, joka on Book-entiteetin primääriavaimen (ID) tietotyyppi.

Ja siinä kaikki! Nyt meillä on täysin toimiva repository!

JpaRepositoryn päämetodit

Mukautettujen SQL-kyselyiden luominen

Spring Data JPA voi automaattisesti luoda kyselyitä, jos metodin nimi noudattaa kaavaa, joka vastaa tietorakennetta. Tämä tapahtuu käyttämällä erityisiä avainsanoja, jotka määrittävät, miten kysely tulee muodostaa.

Videon lyhyt yhteenveto

List<Book> findBookByAuthor(String author);

Tämä metodi luo automaattisesti SQL-kyselyn, joka etsii kaikki kirjat määritellyn author-kentän perusteella. Luotu kysely näyttää tältä:

SELECT * FROM book WHERE author = ?;

Miten se toimii

Metodin nimi findBookByAuthor(String author) on muodostettu seuraavasti: se alkaa etuliitteellä findBook, mikä osoittaa, että metodi suorittaa haun. Seuraavaksi tulee ByAuthor, joka viittaa Book-entiteetin kenttään, jota käytetään haussa.

Kun tämä metodi kutsutaan, Spring Data JPA generoi automaattisesti kyselyn, joka etsii tietueita, joissa author-kenttä vastaa annettua parametria.

SQL-kyselyiden generointi @Query-annotaatiolla

@Query-annotaatio Spring Data JPA:ssa mahdollistaa sekä JPQL- että natiivien SQL-kyselyiden käytön, tarjoten joustavuutta sopivan lähestymistavan valintaan.

JPQL

JPQL (Java Persistence Query Language) toimii olioiden ja niiden ominaisuuksien kanssa.

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

Tämä kysely hakee kaikki Book oliot, joiden author kenttä vastaa annettua arvoa. JPQL on abstraktimpi ja heijastaa tietomallin rakennetta.

Native SQL

Native SQL on suora yhteys tietokantatauluihin.

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

Tässä tapauksessa kysely kohdistuu book tauluun, mahdollistaen tiettyjen SQL-funktioiden ja optimointien käytön.

Lähestymistavan valinta

Jos tarvitset yksinkertaisen kyselyn, joka vastaa tietomallia, käytä JPQL:ää. Jos tarvitset monimutkaisen kyselyn tai tietokantakohtaisia toimintoja, valitse native SQL.

Näin ollen @Query tarjoaa joustavuutta ja mahdollistaa helpon vaihtamisen näiden kahden lähestymistavan välillä tarpeidesi mukaan.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 5
some-alt