Java Academy · Oppitunti

Spring Data -repositoriot ja kyselymetodit

Laajenna JpaRepositorya, määritä kyselymetodeja nimeämiskäytäntöjen avulla ja käytä @Query-annotaatiota mukautettuihin JPQL-kyselyihin.

Oppitunti 2/412 vaihetta

Spring Data -repositoriot ja kyselymetodit on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.

Spring Data JPA -repositoryt

Laajentakaa JpaRepository<Entity, ID>-rajapintaa saadaksenne CRUD-, sivutus- ja lajittelumetodit käyttöön ilman lisätyötä. Spring luo toteutuksen käynnistyksen yhteydessä — SQL:ää tai DAO-koodia ei tarvitse kirjoittaa.

public interface UserRepository extends JpaRepository<User, Long> {
    // Free: findAll, findById, save, delete, count, existsById, etc.
}

Johdetut kyselymetodit

Spring Data luo kyselyt metodinimien perusteella. Nimeämiskäytäntö on seuraava: findBy + ominaisuus + valinnaiset ehdot.

public interface UserRepository extends JpaRepository<User, Long> {
    List<User> findByStatus(UserStatus status);
    Optional<User> findByEmail(String email);
    List<User> findByAgeGreaterThanAndStatusOrderByNameAsc(int age, UserStatus s);
    boolean existsByEmail(String email);
    long countByStatus(UserStatus status);
}

Metodinimissä tuetut avainsanat

Tärkeimmät nimeämisen avainsanat ovat: And, Or, Is/Equals, Between, LessThan/GreaterThan, Like/NotLike, In/NotIn, IsNull/IsNotNull, OrderBy ja First/Top.

List<User> findTop5ByStatusOrderByCreatedAtDesc(UserStatus s);
List<User> findByNameContainingIgnoreCase(String fragment);
List<User> findByCreatedAtBetween(LocalDateTime from, LocalDateTime to);

@Query mukautettuihin JPQL-kyselyihin

Käyttäkää @Query-annotaatiota monimutkaisiin kyselyihin, joita ei voi ilmaista metodinimen avulla. JPQL käyttää entiteettiluokkien nimiä ja kenttiä, ei taulujen tai sarakkeiden nimiä.

@Query("SELECT u FROM User u WHERE u.email = :email AND u.status = :status")
Optional<User> findActiveByEmail(@Param("email") String email,
                                @Param("status") UserStatus status);

@Query("SELECT u.name, COUNT(o) FROM User u JOIN u.orders o GROUP BY u.name")
List<Object[]> countOrdersPerUser();

Natiivikyselyt

Käyttäkää asetusta nativeQuery = true raakaa SQL:ää varten. Tämä on hyödyllistä tietokantakohtaisiin ominaisuuksiin, kuten ON CONFLICT-lauseisiin, ikkunafunktioihin tai kokotekstihakuun.

@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
       nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);

Kyselyjen muuttaminen @Modifying-annotaatiolla

Merkitkää päivitys- ja poistokyselyt @Modifying-annotaatiolla. Lisätkää @Transactional-annotaatio, sillä muuttavat kyselyt edellyttävät aktiivista transaktiota.

@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
                             @Param("cutoff") LocalDateTime cutoff);

Johdetut poistometodit

Spring Data luo poistokyselyjä myös metodinimien perusteella — tämä on kätevää siivoustoimintoihin.

void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);

Repository-rajapinnat: CrudRepository, PagingAndSortingRepository

Käyttäkää suppeampia perusrajapintoja, kun ette tarvitse kaikkia JpaRepository-metodeja. CrudRepository sisältää CRUD-perustoiminnot; PagingAndSortingRepository lisää metodin findAll(Pageable).

public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
    // Only paging + sorting — no save/delete
}

@EntityGraph haun optimointiin

Käyttäkää @EntityGraph-annotaatiota oletushakustrategian ohittamiseen kyselykohtaisesti ja assosiaatioiden lataamiseen eager-tilassa entiteettimappausta muuttamatta.

@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);

Mukautetut repository-toteutukset

Lisätkää mukautettu metodi luomalla rajapinta ja toteutusluokka nimeämiskäytännön UserRepositoryCustom + UserRepositoryCustomImpl mukaisesti. Spring yhdistää ne.

public interface UserRepositoryCustom {
    List<User> searchByCriteria(UserSearchCriteria criteria);
}
public class UserRepositoryCustomImpl implements UserRepositoryCustom {
    @PersistenceContext EntityManager em;
    public List<User> searchByCriteria(UserSearchCriteria c) {
        // use Criteria API or JdbcTemplate
    }
}
public interface UserRepository extends JpaRepository<User,Long>, UserRepositoryCustom {}

Pikatarkistus

Mikä annotaatio vaaditaan @Query-annotaation rinnalle UPDATE/DELETE-lauseissa?

Kertaus

Laajentakaa JpaRepository-rajapintaa saadaksenne CRUD-toiminnot ilman lisätyötä. Käyttäkää johdettuja metodinimiä yksinkertaisiin kyselyihin. Käyttäkää @Query-annotaatiota monimutkaisiin JPQL- tai natiivi-SQL-kyselyihin. Käyttäkää päivityksiin @Modifying+@Transactional-annotaatioita. Hienosäätäkää hakemista @EntityGraph-annotaatiolla.

Aloita maksutta

Opi Java tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
104
Oppitunnit
374

Usein kysytyt kysymykset

Onko oppitunti ”Spring Data -repositoriot ja kyselymetodit” ilmainen?

Kyllä – oppitunnin ”Spring Data -repositoriot ja kyselymetodit” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Spring Data -repositoriot ja kyselymetodit”?

Laajenna JpaRepositorya, määritä kyselymetodeja nimeämiskäytäntöjen avulla ja käytä @Query-annotaatiota mukautettuihin JPQL-kyselyihin. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 2/4.

Kuinka kauan ”Spring Data -repositoriot ja kyselymetodit”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?

Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Entiteettien määritys JPA-annotaatioilla
  2. Spring Data -repositoriot ja kyselymetodit
  3. Yksi-moneen- ja moni-moneen-suhteet
  4. Sivutus, lajittelu ja projektiot
← Takaisin: Java Academy