Giriş
Named Parameter Queries yavaş olabilir. Açıklaması şöyle
The major issue we might face with this parameterised approach is the query performance.The query might run well in your local environment, but suddenly when you start running in Production environment it starts taking too much of time.This is because of the dynamic binding of the parameters to the query by Spring JPA as it cannot determine the data type of the parameter its binding and has to run through all possible types.
@Param Anotasyonu
Java 8'den önce metod parametrelerinin SQL cümlesine atanması için @Param ile işaretli olması gerekir. Yoksa şöyle bir exception fırlatılır.
Eğer metod imzasında fazla parametre varsa exception fırlatılır.
Örnek
Elimizde şöyle bir kod olsun
Şöyle yaparız.
Şöyle yaparız.
Şöyle yaparız.
Java 8'den itibaren derleyiciye -parameters seçeneği geçilir.java.lang.IllegalArgumentException: Name for parameter binding must not be null or empty! For named parameters you need to use @Param for query method parameters on Java versions < 8.
Eğer metod imzasında fazla parametre varsa exception fırlatılır.
Örnek
Elimizde şöyle bir kod olsun
@Repository
public interface ParentRepository extends JpaRepository<Parent, String> {
@Query(value = "SELECT c FROM Child c where c.parent.id =:id")
public List<Child> findChildById(String id, Example example, Pageable pageable);
}
Exception olarak şunu alırızUsing named parameters for method public abstract
java.util.List com.example.test.ParentRepository.findChildById
(java.lang.String,org.hibernate.criterion.Example,
org.springframework.data.domain.Pageable)
but parameter 'Optional[example]' not found in annotated query
'SELECT c FROM Child c where c.parent.id =:id'!
Örnek - selectŞöyle yaparız.
@Query("select p from Person p where p.name = :name and p.address=:address")
Person withNameAndAddressQuery(@Param("name")String name, @Param("address")String addr);
Örnek - selectŞöyle yaparız.
@Query("select t from TimeTable t where MONTH(t.date) =:month and YEAR(t.date) =:year")
List<TimeTable> findAll(@Param("month") Integer month, @Param("year") Integer year);
Örnek - countŞöyle yaparız.
public interface UserRepository extends JpaRepository<User, Long> {
@Query("select count(u) > 0 from User u where u.email = :email")
Boolean isEmailExist(@Param("email")String email);
}
Hiç yorum yok:
Yorum Gönder