Spring Data -repositoriot ja kyselymetodit
Laajenna JpaRepositorya, määritä kyselymetodeja nimeämiskäytäntöjen avulla ja käytä @Query-annotaatiota mukautettuihin JPQL-kyselyihin.
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.
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
- Entiteettien määritys JPA-annotaatioilla
- Spring Data -repositoriot ja kyselymetodit
- Yksi-moneen- ja moni-moneen-suhteet
- Sivutus, lajittelu ja projektiot