15 Nisan 2020 Çarşamba

SpringData JpaRepository İle Custom Method veya Custom Repository

Giriş
Custom metod bence sadece @Query anotasyonu yetersiz kaldığı zaman kullanılmalı. @Query ile çok şeyler yapılabiliyor.
1. SpringData JpaRepository ile @Query ve Join
2. SpringData JpaRepository ile @Query ve Join + Wheren In Clause
3. SpringData JpaRepository İle JpaSpecification yazısına taşıdım

Kullanım
1. Custom Repository arayüzümüzü ve içindeki custom metod imzasını tanımlarız.
2. Normal Spring Repository (ismi FooRepository olsun) sınıfını tanımlarız ama hem JpaRepository hem deCustom Repository arayüzden kalıtırız.
2. FooRepositoryImpl isimli bir sınıf tanımlarız ve Custom Repository arayüzdeki metodu gerçekleştiririz

Örnek
Şöyle yaparız. Burada önce repository arayüzümüzü hem JpaRespository'den hem de kendi sınıfımızdan kalıtıyoruz.
public interface AccountRepository 
  extends JpaRepository<Account, Long>, AccountRepositoryCustom { ... }

public interface AccountRepositoryCustom {
  public void customMethod();
}
Daha sonra kendi özel arayüzümüzdeki metodu gerçekleştiriyoruz. Şöyle yaparız
public class AccountRepositoryImpl implements AccountRepositoryCustom {

  @PersistenceContext
  private EntityManager em;

  public void customMethod() { 
    ...
    em.createQuery(yourCriteria);
    ...
  }
}
Burada sınıfımızın ismi AccountRepositoryImpl olmak zorunda. Açıklaması şöyle.
For >= 2.0 the implementation has to be named as the custom interface with an additional Impl suffix.
Örnek
Şöyle yaparız
//Custom Repository with custom method
public interface EmployeeCustomizedRepository {
  List<Employee> getUserWithCustomQuery();
}

// Spring Repository inherits from JpaRepository + Custom Repository
@Repository
public interface EmployeeRepository extends JpaRepository<Employee, Integer>, 
  EmployeeCustomizedRepository {

  List<Employee> findUserByLastName(String lastname);
  List<Employee> findUserByFistName(String firstname);
}

//Repository implementation with custom method
public class EmployeeCustomizedRepositoryImpl implements EmployeeCustomizedRepository {
	
  @PersistenceContext
  private EntityManager entityManager;

  @Override
  public List<Employee> getUserWithCustomQuery() {
    List<Employee> userList = entityManager
      .createQuery("Select e from Employee e")
      .getResultList();
    // Do the necessary tasks
    return userList;
  }
}
Şeklen şöyle



Hiç yorum yok:

Yorum Gönder