Focus mode

Java Spring

Repository Kavramı

Merhaba, bu bölümde Spring Boot içerisinde Spring Data modülü kullanılarak yapılan data access işlemleri hakkında bilgi vereceğiz. Önceden Java Spring Boot projelerinde data access layer için repository kavramı kullanılıyordu. Ancak şimdi, Spring Data modülü içerisinde bulunan repositori sınıfları kullanılıyor.

Öncelikle, normalde entity sınıfları oluşturarak veritabanı işlemleri yapılırken, şimdi bu işlemleri Spring Data modülü içerisindeki repository interfacerıyla gerçekleştireceğiz. Örneğin, bir müşteri (customer) entity'si oluşturalım ve buna karşılık gelen bir repository interface'i olan "CustomerRepository" tanımlayalım.

import org.springframework.data.repository.CrudRepository;

public interface CustomerRepository extends CrudRepository<Customer, Long> {
  // Özel sorgular veya işlemler buraya eklenebilir
}

Burada CrudRepository Spring Data modülü içerisinde bulunan bir interface'dir ve genel CRUD (Create, Read, Update, Delete) işlemlerini destekler. Customer entity'si ve Long tipindeki ID, bu repository'nin işleyeceği veri tipini ve ID tipini belirtir.

Bu repository interfaceden türetilen sınıflar, önceden yapılandırılmış bir dizi CRUD işlemine sahip olacaktır. Örneğin, findAll(), findById(), save(), delete() gibi metodları otomatik olarak kullanılabilir.

Şimdi, örneğin, bizim için oldukça önemli olan Spring Data Repository ile ilgili bir örnek yapalım. Bu kez, kendimize özgü bir sorgu yapmak istiyoruz. Diyelim ki, bir müşterinin adına veya soyadına göre arama yapmak istiyoruz. Bunun için, kendi özel sorgumuzu yazabiliriz.

Önce, CustomerRepository sınıfımıza şu metodu ekleyelim:

public interface CustomerRepository extends JpaRepository<Customer, Long> {
  List<Customer> findByFirstNameOrLastName(String firstName, String lastName);
}

Bu metot, müşteriyi adı veya soyadı ile aramamıza olanak tanıyan özel bir sorgu oluşturur. Şimdi, bu metodu kullanarak bir Controller sınıfında bu özelliği test edelim.


@RestController
@RequestMapping("/customers")
public class CustomerController {

  @Autowired
  private CustomerRepository customerRepository;

  @GetMapping("/search")
  public List<Customer> searchCustomers(@RequestParam("firstName") String firstName, @RequestParam("lastName") String lastName) {
    return customerRepository.findByFirstNameOrLastName(firstName, lastName);
  }
}

Bu controller, "/customers/search" endpoint'ine firstName ve lastName parametrelerini alarak özel bir müşteri arama işlemi gerçekleştirir. Burada dikkat etmemiz gereken önemli bir şey var: Spring, metot isimlendirmelerinden yola çıkarak özel sorgular oluşturabiliyor, ancak çok karmaşık sorgular için JPQL (Java Persistence Query Language) veya native SQL kullanmak da mümkündür.

Yukarıdaki örnekte, biz sadece basit bir özel sorgu yazdık. Ancak Spring Data, daha karmaşık sorguları da destekler.

Spring Data ile, temel CRUD (Create, Read, Update, Delete) işlemleri için hazır repository metotlarından yararlanabilir ve ayrıca ihtiyaca göre özel sorgular ekleyebilirsiniz. Bu, veritabanı işlemlerini hızlı ve etkili bir şekilde gerçekleştirmenize olanak tanır ve geliştirme sürecinizi kolaylaştırır.

left-disk

Programs to Accelerate Your Progress in a Software Career

Join our 4-8 month intensive Patika+ bootcamps, start with the fundamentals and gain comprehensive knowledge to kickstart your software career!

right-cube

Comments

You need to enroll in the course to be able to comment!