Repositori Spring Data dan Metode Kueri
Perluas JpaRepository, tentukan metode kueri berdasarkan konvensi penamaan, dan gunakan @Query untuk JPQL khusus.
Repositori Spring Data dan Metode Kueri adalah pelajaran Java Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Java Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Java Academy mencakup 4 pelajaran total.
Repositori Spring Data JPA
Perluas JpaRepository<Entity, ID> untuk mendapatkan metode CRUD, penomoran halaman, dan pengurutan secara gratis. Spring membuat implementasinya saat aplikasi dimulai — tidak diperlukan SQL atau kode DAO berulang.
public interface UserRepository extends JpaRepository<User, Long> {
// Free: findAll, findById, save, delete, count, existsById, etc.
}Metode Kueri Turunan
Spring Data membuat kueri dari nama metode. Konvensi penamaannya adalah: findBy + properti + kondisi opsional.
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);
}Kata Kunci yang Didukung dalam Nama Metode
Kata kunci utama dalam penamaan: And, Or, Is/Equals, Between, LessThan/GreaterThan, Like/NotLike, In/NotIn, IsNull/IsNotNull, OrderBy, First/Top.
List<User> findTop5ByStatusOrderByCreatedAtDesc(UserStatus s);
List<User> findByNameContainingIgnoreCase(String fragment);
List<User> findByCreatedAtBetween(LocalDateTime from, LocalDateTime to);@Query untuk JPQL Kustom
Gunakan @Query untuk kueri rumit yang tidak dapat dinyatakan sebagai nama metode. JPQL menggunakan nama kelas entitas dan atribut, bukan nama tabel atau kolom.
@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();Kueri Asli
Gunakan nativeQuery = true untuk menulis SQL mentah. Berguna untuk fitur khusus basis data seperti ON CONFLICT, fungsi jendela, atau pencarian teks lengkap.
@Query(value = "SELECT * FROM users WHERE tsv @@ plainto_tsquery(:q)",
nativeQuery = true)
List<User> fullTextSearch(@Param("q") String query);Mengubah Kueri dengan @Modifying
Beri anotasi pada kueri pembaruan/penghapusan dengan @Modifying. Tambahkan @Transactional karena kueri yang mengubah data memerlukan transaksi aktif.
@Modifying
@Transactional
@Query("UPDATE User u SET u.status = :s WHERE u.lastLogin < :cutoff")
int deactivateInactiveUsers(@Param("s") UserStatus s,
@Param("cutoff") LocalDateTime cutoff);Metode Penghapusan Turunan
Spring Data juga membuat kueri penghapusan dari nama metode — praktis untuk operasi pembersihan.
void deleteByStatus(UserStatus status);
long deleteByCreatedAtBefore(LocalDateTime cutoff);Irisan Repositori: CrudRepository, PagingAndSortingRepository
Gunakan antarmuka dasar yang lebih sempit jika Anda tidak memerlukan semua metode JpaRepository. CrudRepository memiliki CRUD dasar; PagingAndSortingRepository menambahkan findAll(Pageable).
public interface ReadOnlyUserRepository extends PagingAndSortingRepository<User, Long> {
// Only paging + sorting — no save/delete
}@EntityGraph untuk Optimasi Pengambilan
Gunakan @EntityGraph untuk mengganti strategi pengambilan bawaan per kueri, dengan memuat relasi secara segera tanpa mengubah pemetaan entitas.
@EntityGraph(attributePaths = {"orders", "orders.items"})
@Query("SELECT u FROM User u WHERE u.id = :id")
Optional<User> findWithOrders(@Param("id") Long id);Implementasi Repositori Kustom
Tambahkan metode kustom dengan membuat antarmuka + kelas implementasi menggunakan konvensi penamaan UserRepositoryCustom + UserRepositoryCustomImpl. Spring menggabungkan keduanya.
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 {}Pemeriksaan Singkat
Anotasi apa yang diperlukan bersama @Query untuk pernyataan UPDATE/DELETE?
Ringkasan
Perluas JpaRepository untuk mendapatkan CRUD secara gratis. Gunakan nama metode turunan untuk kueri sederhana. Gunakan @Query untuk JPQL rumit atau SQL asli. Gunakan @Modifying+@Transactional untuk pembaruan. Gunakan @EntityGraph untuk menyesuaikan pengambilan data.
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Repositori Spring Data dan Metode Kueri” gratis?
Ya — teks lengkap “Repositori Spring Data dan Metode Kueri” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Java Academy, upgrade ke CoddyKit PRO. Kursus Java Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Repositori Spring Data dan Metode Kueri”?
Perluas JpaRepository, tentukan metode kueri berdasarkan konvensi penamaan, dan gunakan @Query untuk JPQL khusus. Kamu berlatih Java Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Java Academy?
Tidak diperlukan pengalaman sebelumnya. Java Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Repositori Spring Data dan Metode Kueri” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Pemetaan Entitas dengan Anotasi JPA
- Repositori Spring Data dan Metode Kueri
- Relasi One-to-Many dan Many-to-Many
- Paginasi, Pengurutan, dan Proyeksi