Lisää 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
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
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.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Awesome!
Completion rate improved to 3.45
Lisää 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
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
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.
Kiitos palautteestasi!