JpaRepository ve JpaSpecificationExecutor

JpaRepository

JpaRepository, Spring Data JPA tarafından sağlanan ve JPA (Java Persistence API) tabanlı veri erişim katmanını kolaylaştırmak için kullanılan bir arayüzdür. JpaRepository arayüzü, CRUD (Create, Read, Update, Delete) işlemlerini…


This content originally appeared on DEV Community and was authored by Mustafa Çam

JpaRepository

JpaRepository, Spring Data JPA tarafından sağlanan ve JPA (Java Persistence API) tabanlı veri erişim katmanını kolaylaştırmak için kullanılan bir arayüzdür. JpaRepository arayüzü, CRUD (Create, Read, Update, Delete) işlemlerini gerçekleştirmek için çeşitli metodlar sağlar. Bu arayüz, PagingAndSortingRepository arayüzünü genişletir, bu nedenle veri kümesini sayfalandırma ve sıralama desteği de sunar.

Sağladığı Metodlar

JpaRepository arayüzü, veritabanı işlemleri için bir dizi hazır metod içerir:

  • save(S entity): Verilen varlığı kaydeder veya günceller.
  • findById(ID id): Verilen kimlik değeri ile varlığı bulur.
  • findAll(): Tüm varlıkları döner.
  • findAll(Pageable pageable): Tüm varlıkları sayfalandırılmış biçimde döner.
  • deleteById(ID id): Verilen kimlik değeri ile varlığı siler.
  • count(): Varlıkların toplam sayısını döner.
  • existsById(ID id): Verilen kimlik değeri ile bir varlığın olup olmadığını kontrol eder.

Kullanım

JpaRepository arayüzünü kullanarak, veritabanı işlemleri için gerekli temel metodları kolayca ekleyebilirsiniz. İşte bir örnek:

package com.example.demo.repository;

import com.example.demo.model.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long> {
    // Ekstra sorgular buraya eklenebilir
}

JpaSpecificationExecutor

JpaSpecificationExecutor, Spring Data JPA tarafından sağlanan ve JPA kriter tabanlı sorgularını gerçekleştirmek için kullanılan bir arayüzdür. Bu arayüz, dinamik ve esnek sorgular oluşturmayı sağlar.

Sağladığı Metodlar

JpaSpecificationExecutor arayüzü, kriter tabanlı sorgular için çeşitli metodlar içerir:

  • findAll(Specification spec): Verilen spesifikasyona uygun tüm varlıkları bulur.
  • findAll(Specification spec, Pageable pageable): Verilen spesifikasyona uygun tüm varlıkları sayfalandırılmış biçimde bulur.
  • count(Specification spec): Verilen spesifikasyona uygun varlıkların sayısını döner.
  • exists(Specification spec): Verilen spesifikasyona uygun varlıkların olup olmadığını kontrol eder.

Kullanım

JpaSpecificationExecutor arayüzü, dinamik sorgular oluşturmak için kullanılır. Bu sorgular, Specification arayüzü kullanılarak tanımlanır. İşte bir örnek:

package com.example.demo.repository;

import com.example.demo.model.Product;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Long>, JpaSpecificationExecutor<Product> {
    // Ekstra sorgular ve spesifikasyonlar buraya eklenebilir
}

Specification Kullanımı

Specification arayüzü, kriter tabanlı sorgular oluşturmak için kullanılır. İşte bir örnek:

package com.example.demo.specification;

import com.example.demo.model.Product;
import org.springframework.data.jpa.domain.Specification;

public class ProductSpecification {

    public static Specification<Product> hasName(String name) {
        return (root, query, criteriaBuilder) ->
                criteriaBuilder.equal(root.get("name"), name);
    }

    public static Specification<Product> hasPrice(BigDecimal price) {
        return (root, query, criteriaBuilder) ->
                criteriaBuilder.equal(root.get("price"), price);
    }
}

Bu spesifikasyonlar daha sonra repository metodlarında kullanılabilir:

import com.example.demo.model.Product;
import com.example.demo.repository.ProductRepository;
import com.example.demo.specification.ProductSpecification;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.List;

@Service
public class ProductService {

    @Autowired
    private ProductRepository productRepository;

    public List<Product> findProductsByNameAndPrice(String name, BigDecimal price) {
        return productRepository.findAll(
                Specification.where(ProductSpecification.hasName(name))
                             .and(ProductSpecification.hasPrice(price))
        );
    }
}

Bu şekilde, JpaRepository ve JpaSpecificationExecutor arayüzleri ile CRUD işlemleri ve dinamik sorgular için güçlü ve esnek bir veri erişim katmanı oluşturabilirsiniz.


This content originally appeared on DEV Community and was authored by Mustafa Çam


Print Share Comment Cite Upload Translate Updates
APA

Mustafa Çam | Sciencx (2024-06-22T14:56:48+00:00) JpaRepository ve JpaSpecificationExecutor. Retrieved from https://www.scien.cx/2024/06/22/jparepository-ve-jpaspecificationexecutor/

MLA
" » JpaRepository ve JpaSpecificationExecutor." Mustafa Çam | Sciencx - Saturday June 22, 2024, https://www.scien.cx/2024/06/22/jparepository-ve-jpaspecificationexecutor/
HARVARD
Mustafa Çam | Sciencx Saturday June 22, 2024 » JpaRepository ve JpaSpecificationExecutor., viewed ,<https://www.scien.cx/2024/06/22/jparepository-ve-jpaspecificationexecutor/>
VANCOUVER
Mustafa Çam | Sciencx - » JpaRepository ve JpaSpecificationExecutor. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/06/22/jparepository-ve-jpaspecificationexecutor/
CHICAGO
" » JpaRepository ve JpaSpecificationExecutor." Mustafa Çam | Sciencx - Accessed . https://www.scien.cx/2024/06/22/jparepository-ve-jpaspecificationexecutor/
IEEE
" » JpaRepository ve JpaSpecificationExecutor." Mustafa Çam | Sciencx [Online]. Available: https://www.scien.cx/2024/06/22/jparepository-ve-jpaspecificationexecutor/. [Accessed: ]
rf:citation
» JpaRepository ve JpaSpecificationExecutor | Mustafa Çam | Sciencx | https://www.scien.cx/2024/06/22/jparepository-ve-jpaspecificationexecutor/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.